Как я могу использовать позиционный аргумент с пробелом в Pythonbrew?

1

Я использую модуль argparse для принятия ввода в программу с большим успехом. Я определил около шести необязательных аргументов (аргументы, которые должны быть добавлены с помощью - можно разместить в любом месте списка) и один позиционный аргумент (требуемые аргументы, которые используют порядок, заданный для определения аргумента), поэтому моя диаграмма использования выглядит так: это (с дополнительными необязательными аргументами, удаленными для краткости):

usage: Main.py [-h] [--site SITE] [--username USERNAME] [--password PASSWORD]
           [--verbose]
           filepath

Чтобы запустить сценарий Python 2.7 на Debian (который поставляется с Python 2.6), у меня был успех с использованием pythonbrew, который позволяет нескольким установкам Python сосуществовать на одном сервере. Хороший побочный эффект от его использования означает, что я могу отключить исполняемые разрешения для моего скрипта, что значительно упрощает управление пользователями.

Все было хорошо, пока я не попытался сохранить путь к файлу (мой одиночный позиционный аргумент), в котором было место в нем, и я обнаружил, что не могу!

pythonbrew py Main.py --verbose /media/rackspace/db1/clients/My\ Client/
pythonbrew py Main.py --verbose '/media/rackspace/db1/clients/My\ Client/'
pythonbrew py Main.py --verbose "/media/rackspace/db1/clients/My\ Client/"
pythonbrew py Main.py --verbose [/media/rackspace/db1/clients/My\ Client/]

pythonbrew py Main.py --verbose /media/rackspace/db1/clients/My Client/
pythonbrew py Main.py --verbose '/media/rackspace/db1/clients/My Client/'
pythonbrew py Main.py --verbose "/media/rackspace/db1/clients/My Client/"
pythonbrew py Main.py --verbose [/media/rackspace/db1/clients/My Client/]

все возвращают одно и то же сообщение об ошибке

Main.py: error: unrecognized arguments: Client

Может ли кто-нибудь подтвердить эту ошибку? Тот факт, что никто еще не упомянул об этом в группах Python, заставляет меня поверить, что это ошибка Pythonbrew, но я надеюсь сохранить Pythonbrew и найти альтернативный способ запуска этого скрипта. На данный момент я просто храню файлы в папке без пробела, но я надеюсь, что кто-то может помочь с этой ошибкой.

  • 0
    Похоже, ошибка в pythonbrew , но не огромная.
  • 0
    О ради бла Я только что прочитал исходный код pythonbrew/commands/py.py и, ну, мгновенный pythonbrew/commands/py.py .
Теги:
arguments
argparse

2 ответа

2
Лучший ответ

Проблема в pythonbrew/commands/py.py Каждый вызов subprocess.Popen() необходимо изменить так, чтобы он использовал список для команды вместо строки.

  • 0
    У меня был успех, прежде чем использовать shlex.split, чтобы получить необходимый список из строковой команды
  • 0
    Вы можете быть на что-то с этим ответом. Когда я объединяю свои примеры (не знаю, почему я этого не сделал) и использую pythonbrew py Main.py --verbose ['/media/rackspace/db1/clients/My Client/'] , он проходит правильно. Но, по иронии судьбы, он передает аргумент с помощью встроенных скобок. Итак, мой код завершается ошибкой с отсутствием такого каталога: '[/ media / rackspace / db1 / clients / My Client /]' . Есть ли другой способ передать список?
Показать ещё 4 комментария
1

Я не могу опубликовать комментарий, так как я слишком новичок, но вы пытались избежать пространства, поставив перед ним? Может быть, что-то вроде:

pythonbrew py Main.py --verbose/media/rackspace/db1/clients/My\ Client/

  • 0
    Если кавычки не делают этого, то и обратный слеш тоже не будет.
  • 0
    Вы правы в своем наблюдении, я фактически использовал обратную косую черту, но при написании вопроса я набрал прямую косую черту. Я редактировал вопрос. Хороший улов!

Ещё вопросы

Сообщество Overcoder
Наверх
Меню