将参数从cmd传递到python脚本[重复]

问题描述 投票:0回答:3

我用 python 编写脚本,并通过输入以下内容使用 cmd 运行它们:

C:\> python script.py

我的一些脚本包含基于标志调用的单独算法和方法。 现在我想直接通过 cmd 传递标志,而不必进入脚本并在运行之前更改标志,我想要类似的东西:

C:\> python script.py -algorithm=2

我读到人们使用 sys.argv 来实现几乎类似的目的,但是阅读手册和论坛时我无法理解它是如何工作的。

python cmd command-line-arguments
3个回答
20
投票

有一些专门用于解析命令行参数的模块:

getopt
optparse
argparse
optparse
已被弃用,并且
getopt
的功能不如
argparse
强大,所以我建议您使用后者,从长远来看它会更有帮助。

这是一个简短的例子:

import argparse

# Define the parser
parser = argparse.ArgumentParser(description='Short sample app')

# Declare an argument (`--algo`), saying that the 
# corresponding value should be stored in the `algo` 
# field, and using a default value if the argument 
# isn't given
parser.add_argument('--algo', action="store", dest='algo', default=0)

# Now, parse the command line arguments and store the 
# values in the `args` variable
args = parser.parse_args()

# Individual arguments can be accessed as attributes...
print args.algo

这应该可以帮助你开始。最坏的情况是,网上有大量可用文档(例如,这个)...


12
投票

它可能无法回答您的问题,但有些人可能会发现它很有用(我正在这里寻找这个):

如何从cmd发送2个参数(arg1 + arg2)到python 3:

----- 在 test.cmd 中发送参数:

python "C:\Users\test.pyw" "arg1" "arg2"

----- Retrieve the args in test.py:
    import sys, getopt
    print ("This is the name of the script= ", sys.argv[0])
    print("Number of arguments= ", len(sys.argv))
    print("all args= ", str(sys.argv))
    print("arg1= ", sys.argv[1])
    print("arg2= ", sys.argv[2])

2
投票

尝试使用

getopt
模块。它可以处理短命令行选项和长命令行选项,并以类似的方式在其他语言(C、shell 脚本等)中实现:

import sys, getopt


def main(argv):

    # default algorithm:
    algorithm = 1

    # parse command line options:
    try:
       opts, args = getopt.getopt(argv,"a:",["algorithm="])
    except getopt.GetoptError:
       <print usage>
       sys.exit(2)

    for opt, arg in opts:
       if opt in ("-a", "--algorithm"):
          # use alternative algorithm:
          algorithm = arg

    print "Using algorithm: ", algorithm

    # Positional command line arguments (i.e. non optional ones) are
    # still available via 'args':
    print "Positional args: ", args

if __name__ == "__main__":
   main(sys.argv[1:])

然后,您可以使用

-a
--algorithm=
选项指定不同的算法:

python <scriptname> -a2               # use algorithm 2
python <scriptname> --algorithm=2    # ditto

参见:getopt 文档

© www.soinside.com 2019 - 2024. All rights reserved.