2013-02-12 39 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 2013-02-12 20:55:54

回答

7

如果您解析通过OptionParserparse_args()选项,不直接使用sys.argv但返回args而不是它应该包含尚未由OptionParser解析的部分。

例如,在你的代码通过

apps = args 

更换

apps = sys.argv[1:] 

(或只是报废appsargs下去)。

+0

你能举个简单的例子吗? – pistal 2013-02-12 20:42:52

+0

我已经更新了我的答案。 – 2013-02-12 20:47:19

+0

问题:我是否应该将问题标题更改为更合适。还是足够了? – pistal 2013-02-12 20:49:19