2016-08-31 4 views
0

Моя командная строка сценария принимает несколько аргументов, включая строки, Интс, поплавки и списки, и это становится немного сложнее, чтобы сделать вызов со всеми аргументами:Более эффективный способ передачи нескольких аргументов сценарию?

python myscript.py arg1 arg2 arg3 ... argN 

Чтобы избежать того, чтобы написать все аргументы в команде line Я создал текстовый файл со всеми аргументами, которые я просто читал по строкам для сбора аргументов. Это прекрасно работает, но лучше ли это для этого? Есть ли более эффективный способ?

+1

'argparse' довольно велик, что позволяет поместить аргументы командной строки в файле и прочитать оттуда что полезно, когда число параметров начинают получать громоздким ... Но если у вас есть много вещей, которые вы хотите изменить, вам, вероятно, лучше использовать какой-то структурированный файл инициализации (например, 'configparser') – mgilson

+1

Это действительно зависит от использования. Если пользователь должен каждый раз вводить эти параметры, тогда файл может быть менее подвержен ошибкам. Если параметры не меняются очень часто, вы можете использовать переменные среды, но это может быть грязно, поэтому я не рекомендую это делать. Вы можете читать из 'stdin', а затем либо передавать значения в документ или использовать этот документ (оболочное устройство для передачи встроенных данных). Не могли бы вы пояснить, как вызывается программа, т. Е. Из командной строки или скрипта? – cdarke

+0

@cdarke Теперь я вызываю программу 'python myscript.py input_args.txt' с текстовым файлом, содержащим мои аргументы – LukeBowl

ответ

1

Для меня, я думаю питон Getopt это путь.

#!/usr/bin/python 

import sys, getopt 

def main(argv): 
    inputfile = '' 
    outputfile = '' 
    try: 
     opts, args = getopt.getopt(argv,"hi:o:",["ifile=","ofile="]) 
    except getopt.GetoptError: 
     print 'test.py -i <inputfile> -o <outputfile>' 
     sys.exit(2) 
    for opt, arg in opts: 
     if opt == '-h': 
     print 'test.py -i <inputfile> -o <outputfile>' 
     sys.exit() 
     elif opt in ("-i", "--ifile"): 
     inputfile = arg 
     elif opt in ("-o", "--ofile"): 
     outputfile = arg 
    print 'Input file is "', inputfile 
    print 'Output file is "', outputfile 

if __name__ == "__main__": 
    main(sys.argv[1:]) 

Использование:

usage: test.py -i <inputfile> -o <outputfile> 

легче работать, когда у вас есть имя аргумента.

Ref: http://www.tutorialspoint.com/python/python_command_line_arguments.htm

Смежные вопросы