Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/318.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 解析命令行参数 作为我的问题的一个例子,考虑以下情况:_Python_Command Line - Fatal编程技术网

Python 解析命令行参数 作为我的问题的一个例子,考虑以下情况:

Python 解析命令行参数 作为我的问题的一个例子,考虑以下情况:,python,command-line,Python,Command Line,用户从命令行启动程序,语法与此类似 python prog.py "hi there" hi=Hello there=World! 程序的输出是“Hello World!” 我的问题涉及到解析参数的部分。如何保存“hi=Hello there=World!”部分中包含的信息以便使用?从那里我应该可以用它做点什么 我根本不知道参数是什么,因此解决方案需要尽可能通用。使用 安装docopt: $ pip install docopt 编写prog.py的代码: """ Usage: p

用户从命令行启动程序,语法与此类似

python prog.py "hi there" hi=Hello there=World!
  • 程序的输出是“Hello World!”

  • 我的问题涉及到解析参数的部分。如何保存“hi=Hello there=World!”部分中包含的信息以便使用?从那里我应该可以用它做点什么

    我根本不知道参数是什么,因此解决方案需要尽可能通用。

    使用 安装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)
    
    “”“
    用法:
    prog.py
    """
    如果名称=“\uuuuu main\uuuuuuuu”:
    从docopt导入docopt
    args=docopt(文档)
    打印参数
    打印“----”
    name=args[“”]
    问候语=args[“”]
    打印“{greeting}{name}!”。格式(greeting=greeting,name=name)
    
    使用它:

    首先请参阅使用说明:

    $ python prog.py
    Usage:
        prog.py <greeting> <name>
    
    $python prog.py
    用法:
    prog.py
    
    然后使用它:

    $ python prog.py Ola Mundi
    {'<greeting>': 'Ola',
     '<name>': 'Mundi'}
    ------
    Ola Mundi!
    
    $python prog.py Ola Mundi
    {'':'Ola',
    '''Mundi'}
    ------
    奥拉·蒙迪!
    
    你必须这样做。。。将其另存为“argtest.py”:

    这将把第一个参数传递到main()中

    因此,如果您是从命令行运行

     python argtest.py hello
    
    您的输出将是

     hello
    
    当然,在
    main()
    中,您可以定义要对参数执行的任何操作

    就我个人而言,我在sys.argv[1:][3]中的
    if uuuu name_uuuuuuu==“uuu main_uuuuuu”:
    行下进行解析,通常类似于sys.argv[1:][1]中x的
    arguments=[x.split('=')。\u35;如果你想分离像“pie=apple fart=臭蛋”这样的参数

    sys.argv
    是在
    python argtest.py
    空格分隔后放置的内容的列表

    例如,如果执行
    python argtest.py苹果派逗号poop

    sys.argv[1] == 'apple'
    sys.argv[2] == 'pie'
    sys.argv[3] == 'comma'
    sys.argv[4] == 'poop'
    

    我最终使用了简单的字符串处理:

    import sys
    
    entry = {}
    
    for i in sys.argv[1:]:
        pos = i.find("=")
        entry[i[:pos]] = i[pos+1:]
    

    使用模块。或者使用
    docopt
    更简单。将您的问题标题复制/粘贴到google中会得到三个Python模块作为最重要的结果。@Lattyware除非我会避免使用
    optparse
    ,因为它已被弃用。@AlexThornton确实,链接到argparse的页面顶部有一个很大的警告。
    import sys
    
    entry = {}
    
    for i in sys.argv[1:]:
        pos = i.find("=")
        entry[i[:pos]] = i[pos+1:]