OptionParser не принимает амперсанд и '&'
У меня проблема с использованием OptionParser в Python. Когда я даю '&' как один из символов ввода, он отбрасывает '&', а символы рядом с ним обрабатываются как отдельная команда. Вот пример кода для test.py:
from optparse import OptionParser
cmdParser = OptionParser()
cmdParse.add_option("-n", "--USER", help="User Name")
cmdParse.add_option("-p", "--PASSWORD", help="Password")
(options, args) = cmdparser.parse_args()
uname = options.USER
pwd = options.PASSWORD
Когда я запускаю его с командой: python test.py -n sample -p 123 & 45 password, он читает только 123, а sayd 45 не распознается как interna и внешняя ошибка команды. Все другие специальные символы работают хорошо, кроме "&". Это работает нормально, если я дам -p "123 & 45". Но я не хочу указывать строку явно. Это ограничение с OptionParser? Любая помощь заметна.
Заранее спасибо.
1 ответ
Это не проблема с optparse
- ваша программа никогда не видит ничего кроме амперсанда, потому что это интерпретируется вашей оболочкой. "&" используется во многих оболочках для запуска команды в фоновом режиме. Таким образом, ваша командная строка интерпретируется как "запустить python test.py -n sample -p 123
в фоновом режиме, а затем выполните команду 45
", объясняя вашу ошибку. Решение состоит в том, чтобы процитировать ваш вариант, как вы уже выяснили. Это ограничение оболочки, и оно не может быть исправлено чем-либо, что вы делаете в Python, так как программа никогда не видит весь вариант.
PS: вы не должны использовать optparse
больше- лучше использоватьargparse
,