Python: Как передать большую строку в качестве одного аргумента? - PullRequest
2 голосов
/ 16 мая 2011

Я пытаюсь передать всю строку в качестве аргумента скрипту Python. У меня проблема в том, что Python предполагает, что я хочу только первое слово строки.

В приведенном ниже примере аргумент -l обозначает log, и я хочу, чтобы он захватывал всю строку.

пример:

python myscript.py -l "Big String I want to as single argument"

код ниже:

try:
  opts, args = getopt.getopt(sys.argv[1:], 'hcrn:l:wo:a:emi', ["reset="])
  #-l is one of many arguments I'm looking for
except getopt.error, err:
  print str(err)
  sys.exit(2)

for o, a in getopts:
    if o in ("-l", "--log"):  #log
    logIt(a)  # Problem here a='Big'

Как получить всю строку для первого аргумента, а не только для первого слова? Пример пожалуйста.

Ответы [ 3 ]

2 голосов
/ 16 мая 2011

Первое: getopt довольно устарел и устарел.

Пожалуйста, используйте модуль optparse в Python или еще более новый модуль argparse (есть обратный порт argparse для Python 2.X на PyPI).

Первый пример четко описывает ваш вариант использования, решенный с помощью optparse:

http://docs.python.org/library/optparse.html

parser = OptionParser()
parser.add_option("-f", "--file", dest="filename",
                  help="write report to FILE", metavar="FILE")

(options, args) = parser.parse_args()
1 голос
/ 16 мая 2011

Ваш код отлично работает, если вы его исправите.
Возможно, проблема в вашей logIt функции. Если я исправлю это (на самом деле не работает в опубликованном виде):

for o, a in getopts:
    if o in ("-l", "--log"):  #log
    logIt(a)  # Problem here a='Big'

с этим (и используя print):

for o, a in opts:
    if o in ("-l", "--log"):  #log
        print a  # No Problem here a=["Big String I want to as single argument"]

печатает то, что должно печатать:

C:\Python26>python myscript.py -l "Big String I want to as single argument"
Big String I want to as single argument

Так что, вероятно, ваша проблема не в getopt, а в вашей функции logIt.

0 голосов
/ 16 мая 2011

Это должен быть вариант

try:
  opts, args = getopt.getopt(sys.argv[1:], 'hcrn:l:wo:a:emi', ["reset="])
  #-l is one of many arguments I'm looking for
except getopt.error, err:
  print str(err)
  sys.exit(2)

for o, a in opts:
    if o in ("-l", "--log"):  #log
    logIt(a)
...