解析命令行参数

时间:2014-05-06 18:21:11

标签: python command-line

作为我的问题的一个例子,请考虑以下情况:

  1. 用户使用与此

    类似的语法从命令行启动程序
    python prog.py "hi there" hi=Hello there=World!
    
  2. 该程序的输出是“Hello World!”。

  3. 我的问题是指解析参数的部分。如何保存“hi = Hello there = World!”中包含的信息。部分为了使用它?从那里我应该可以用它做点什么。

    我对参数的含义一无所知,因此解决方案需要尽可能通用。

3 个答案:

答案 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.argvpython 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:]