2013-02-12 20 views
2

Я написал скрипт python, который принимает входные данные через модуль python optparse. , и я принимаю ввод от sys.argv.Optparse и sys.argv - Python

Когда я использую любой из них, программа работает правильно. Например:

python dperf.py -m 1 -c 2 -n 3 
python dperf.py foobar 

Однако, когда я даю ввод таким образом, это не происходит.

python dperf.py foobar -m 1 -c 2 -n 3 

Есть ли ошибка в том, как я использую sys.argv?

parser = optparse.OptionParser() 
#migration 
parser.add_option("-m", type="float", dest="migr") 
#collection 
parser.add_option("-c", type="float", dest="coll") 
#num of lines to read 
parser.add_option("-n", type="float", dest="fileread") 
(options, args) = parser.parse_args() 

ti = options.migr 
colle = options.coll 
linereadfiles = options.fileread 

apps = sys.argv[1:] 
+2

Для новых разработок ознакомьтесь с ['argparse'] (http://docs.python.org/dev/library/argparse.html) с [' optparse'] (http: //docs.python .org/2/library/optparse) устарела. – Bryan

ответ

7

Если проанализировать параметры через parse_args() в OptionParser, не используйте sys.argv напрямую, а возвращаемый args вместо который должен содержать детали уже не разобранные по OptionParser.

Например, в коде заменить

apps = sys.argv[1:] 

по

apps = args 

(или просто лом apps и идти с args).

+0

можете ли вы дать короткий пример, пожалуйста? – pistal

+0

Я обновил свой ответ. –

+0

Вопрос: Должен ли я изменить заголовок вопроса, чтобы быть более подходящим. или это было достаточно достаточно? – pistal