Python: создание кортежа из командной строки - PullRequest
2 голосов
/ 16 ноября 2010

У меня есть программа, которая обеспечивает ввод командной строки, например:

python2.6 prog.py -p a1 b1 c1

Теперь у нас может быть любое количество входных параметров, т.е.Возможны -p a1 и -p a1 c1 b1 e2.

Я хочу создать кортеж на основе переменных входных параметров.Любые предложения о том, как это сделать, будут очень полезны!Кортеж фиксированной длины будет легким, но я не уверен, как реализовать переменную длину.

спасибо.

Ответы [ 8 ]

2 голосов
/ 16 ноября 2010

Кортеж фиксирован по длине.Создав кортеж, вы не сможете его изменить.

Аргументы командной строки сохраняются в списке.

import sys
t = tuple(sys.argv[1:]) # since sys.argv[0] is the name of the script
1 голос
/ 16 ноября 2010

Правильный ответ на ваш точный вопрос - tuple(sys.argv[1:]), но есть лучшие способы получить аргументы командной строки, чтобы вы могли использовать их более правильно.Попробуйте optparse: http://www.doughellmann.com/PyMOTW/optparse/

Если вы используете Python 2.7, вы должны использовать argparse.

1 голос
/ 16 ноября 2010

Вы можете получить аргументы из командной строки, используя getopt. Возвращает список аргументов, которые затем можно превратить в кортеж с помощью tuple ()

import getopt
import sys

def main(argv):
    opts, args = getopt.getopt(argv, 'p')
    return tuple(args)
if __name__=='__main__':
    main(sys.argv[1:])

См. http://www.faqs.org/docs/diveintopython/kgp_commandline.html

1 голос
/ 16 ноября 2010
import sys

t1 = tuple(sys.argv)
t2 = tuple(sys.argv[1:])

print t1
print t2
1 голос
/ 16 ноября 2010

Почему бы вам не посмотреть обсуждение * args и ** kwargs некоторое время назад?

1 голос
/ 16 ноября 2010

Вы можете преобразовать списки в кортежи с помощью конструктора tuple ():

>>> tuple([1, 2, 3, 4])
(1, 2, 3, 4)

Используйте это на sys.argv =) или на его часть. Ура! * * 1004

1 голос
/ 16 ноября 2010

Итерируйте по sys.argv, пока не достигнете другого флага.

1 голос
/ 16 ноября 2010

Это должно сделать это:

import sys
t = tuple(sys.argv)

Поскольку, возможно, вам не нужно имя сценария, вы можете сделать это:

if len(sys.argv) > 1:
    t = tuple(sys.argv[1:])
...