作为我的问题的一个例子,请考虑以下情况:
用户使用与此
类似的语法从命令行启动程序python prog.py "hi there" hi=Hello there=World!
该程序的输出是“Hello World!”。
我的问题是指解析参数的部分。如何保存“hi = Hello there = World!”中包含的信息。部分为了使用它?从那里我应该可以用它做点什么。
我对参数的含义一无所知,因此解决方案需要尽可能通用。
答案 0 :(得分:1)
docopt
安装docopt:
$ pip install docopt
编写prog.py
的代码:
"""
Usage:
prog.py <greeting> <name>
"""
if __name__ == "__main__":
from docopt import docopt
args = docopt(__doc__)
print args
print "------"
name = args["<name>"]
greeting = args["<greeting>"]
print "{greeting} {name}!".format(greeting=greeting, name=name)
使用它:
首先查看使用说明:
$ python prog.py
Usage:
prog.py <greeting> <name>
然后使用它:
$ python prog.py Ola Mundi
{'<greeting>': 'Ola',
'<name>': 'Mundi'}
------
Ola Mundi!
答案 1 :(得分:1)
你必须做这样的事情......把它保存为“argtest.py”:
import sys
def main(x):
print(x)
if __name__ == "__main__":
print sys.argv #notice this is whatever you put in the arguments
print sys.argv[0] # this is the name of the file you used
main(sys.argv[1])
这会将第一个arg传递给main()
所以如果你从命令行运行
python argtest.py hello
您的输出将是
hello
在你的main()
中你当然要定义你想用参数做什么
我亲自在if __name__=="__main__":
行下进行解析,通常类似于arguments = [x.split('=') for x in sys.argv[1:]] #if you want to seperate arguments like "pie=apple fart=stinky"
sys.argv
是python argtest.py
空格分隔后放置的任何内容的列表
例如,如果您执行python argtest.py apple pie comma poop
sys.argv[1] == 'apple'
sys.argv[2] == 'pie'
sys.argv[3] == 'comma'
sys.argv[4] == 'poop'
答案 2 :(得分:0)
我最终使用简单的字符串处理:
import sys
entry = {}
for i in sys.argv[1:]:
pos = i.find("=")
entry[i[:pos]] = i[pos+1:]