Python optparse不适合我
我目前正在学习如何使用Python optparse模块。我正在尝试下面的示例脚本,但是args变量为空。我使用Python2.5和2.6尝试了这一点,但没有效果Python optparse不适合我,python,optparse,Python,Optparse,我目前正在学习如何使用Python optparse模块。我正在尝试下面的示例脚本,但是args变量为空。我使用Python2.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(
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、 --帮助显示此帮助消息并退出
-p PERSON,--PERSON=PERSON变量
args
包含未分配给选项的任何参数。通过将Kelvin
赋值给person
选项变量,您的代码确实工作正常
如果您尝试运行hello.py-p Kelvin file1.txt
,您会发现person
仍然被分配值“Kelvin”
,然后您的参数将包含“file1.txt”
另见:
parse_args()
返回两个值:
options
,一个包含所有选项值的对象,例如,如果--file
采用单个字符串参数,则options.file
将是用户提供的文件名,如果用户未提供该选项,则None
args
,解析选项后剩余的位置参数列表
注意:“选项”是一个包含您添加的选项的字典。“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$
根据optpass
帮助:
成功时返回一对(值,args),其中“values”是一个值实例(包含所有选项值),“args”是解析选项后剩余的参数列表
请尝试hello.py-p Kelving abcd
-“Kelvin”将由optpasse解析,“abcd”将降落在args
由parse\u args返回的变量中。哦,我明白了。我阅读了帮助文档,但我想我必须仔细阅读才能完全理解。谢谢哇,第一次来这里,我得到了一个快速的回复。你应该选择一个答案,这样人们就会知道你是值得信赖的,下次你也会得到快速的回复!我不确定ast模块是否与args变量为何为空有关。参数的数量不正确,只是分配方式不同。请告诉我代码有什么问题。顺便说一句,这是一个解决方法…我无法使len(args)使其工作…不确定我是否遗漏了一些内容。它没有解决问题,海报问为什么args
为空。答案是args应该为空,因为optparser
就是这样工作的。您的代码将添加'person'
键并显示它,但这不是这里应该发生的事情。
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)