#python #shell #optionparser
#python #оболочка #optionparser
Вопрос:
Я использую OptionParser() и определяю следующее:
parser.add_option("--cmd", dest="command", help="command to run")
Однако, если я предоставлю сложную команду оболочки, такую как :
python shell.py --cmd "for i in `seq 1 10`; do xxx; done"
И внутренняя печать options.command
, я получаю что-то неожиданное для меня:
for i in 1
2
3
4
5
6
7
8
9
10; do
Есть ли хороший способ передать параметр OptionParser, который является командой оболочки?
Ответ №1:
При вызове:
python shell.py --cmd "for i in `seq 1 10`; do xxx; done"
Оболочка сначала заменяет команду, заключенную в `, своим выводом. Таким образом, команда, которую вы фактически вызываете, является:
python shell.py --cmd "for i in 1
2
3
4
5
6
7
8
9
10; do ..."
Чтобы избежать этого:
Экранируйте символ ` при вызове команды:
python shell.py --cmd "for i in `seq 1 10`; do xxx; done"
Используйте сильные кавычки (строка, заключенная в ‘)
python shell.py --cmd 'for i in `seq 1 10`; do xxx; done'
Комментарии:
1. Я не хочу использовать экранирование в команде ввода, в расширенной команде больше специальных символов, чем `, это все еще возможно?
2. Это связано с вашей оболочкой больше, чем с python. Попробуйте использовать » вместо »