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,

Другие вопросы по тегам