我目前正在学习如何使用Python optparse模块。我正在尝试以下示例脚本,但args变量为空。我尝试使用Python 2.5和2.6,但无济于事。
import optparse
def main():
p = optparse.OptionParser()
p.add_option('--person', '-p', action='store', dest='person', default='Me')
options, args = p.parse_args()
print '\n[Debug]: Print options:', options
print '\n[Debug]: Print args:', args
print
if len(args) != 1:
p.print_help()
else:
print 'Hello %s' % options.person
if __name__ == '__main__':
main()
输出:
>C:\Scripts\example>hello.py -p Kelvin
[Debug]: Print options: {'person': 'Kelvin'}
[Debug]: Print args: []
Usage: hello.py [options]
选项: -h, - help显示此帮助消息并退出 -p PERSON, - Person = PERSON
答案 0 :(得分:7)
args
变量包含未分配给选项的任何参数。通过将Kelvin
分配给person
选项变量,您的代码确实正常运行。
如果您尝试运行hello.py -p Kelvin file1.txt
,您会发现仍然为person
分配了值"Kelvin"
,然后您的args
将包含"file1.txt"
。< / p>
另见the documentation on optparse
:
parse_args()
返回两个值:
options
,一个包含所有选项值的对象 - 例如。如果--file
采用单个字符串参数,则options.file
将是用户提供的文件名,如果用户未提供该选项,则为None
args
,解析选项后剩余的位置参数列表
答案 1 :(得分:1)
根据optparse
帮助:
“成功时返回一对(values,args),其中'values'是一个Values实例(包含所有选项值),'args'是解析选项后左上的参数列表。“
尝试hello.py -p Kelving abcd
- '开尔文'将由optparse解析,'abcd'将落在args
parse_args
变量中
答案 2 :(得分:0)
注意:“选项”是包含您添加的选项的字典。 “Args”是一个包含未解析参数的列表。你不应该看长度“args”。这是一个说明的成绩单:
moshez-mb:profile administrator$ cat foo
import optparse
def main():
p = optparse.OptionParser()
p.add_option('--person', '-p', action='store', dest='person', default='Me')
options, args = p.parse_args()
print '\n[Debug]: Print options:', options
print '\n[Debug]: Print args:', args
print
if len(args) != 1:
p.print_help()
else:
print 'Hello %s' % options.person
if __name__ == '__main__':
main()
moshez-mb:profile administrator$ python foo
[Debug]: Print options: {'person': 'Me'}
[Debug]: Print args: []
Usage: foo [options]
Options:
-h, --help show this help message and exit
-p PERSON, --person=PERSON
moshez-mb:profile administrator$ python foo -p Moshe
[Debug]: Print options: {'person': 'Moshe'}
[Debug]: Print args: []
Usage: foo [options]
Options:
-h, --help show this help message and exit
-p PERSON, --person=PERSON
moshez-mb:profile administrator$ python foo -p Moshe argument
[Debug]: Print options: {'person': 'Moshe'}
[Debug]: Print args: ['argument']
Hello Moshe
moshez-mb:profile administrator$
答案 3 :(得分:0)
import ast
(options, args) = parser.parse_args()
noargs = ast.literal_eval(options.__str__()).keys()
if len(noargs) != 1:
parser.error("ERROR: INCORRECT NUMBER OF ARGUMENTS")
sys.exit(1)