我有一个程序存储一些重要的变量作为程序正常运行所必需的字符串:DeviceNumber
,IPAddress
和Port
。这些变量存储在程序加载的文件中。使用argparse覆盖变量取决于标志,使用默认值,如果没有参数给出(python)
为了调试目的,我希望能够用命令行参数快速覆盖文件。参数都是可选的,如果不使用,那么它只是使用从文件中取出的变量。
我可以使用像DeviceNumber = sys.args[1]
这样的简单位置参数,并且只有在存在参数时才覆盖变量,但是如果输入变量的顺序不对,则会出现无法处理的问题,或者如果输入例如,IPAddress
和Port
,但不是DeviceNumber
。我一直在阅读pyDocs argparse Tutorial和文档,但它对我所需要的东西似乎并不是非常有用 - 它涵盖了强制参数和可选标志,但似乎不允许依赖于标志的可选参数表示他们的目的。 编辑:原来是这样,但这个例子不是很明显,所以我错过了它。同样,我在SE上找到适用的问题时遇到了问题。
总之,给予相同的
#Default Names loaded from file
DeviceNumber = "2000"
IPAddress = "159.142.32.30"
Port = 80
#if command line args entered:
#overwrite default vars with arg corresponding to each one
#this probably involves argparse, but I don't know how
print "DNumber:"+DeviceNumber+" IP:"+IPAddress+" Port:"+Port
不同CMD线路输入的一些实例中的程序/输出将是:
所有值均为默认
$ python myfile.py
DNumber:2000 IP:159.142.32.30 Port:80
所有值都被重写
$ python myfile.py -n 1701 -ip 120.50.60.1 -p 3000
DNumber:1701 IP:120.50.60.1 Port:3000
默认DNumber
,覆盖IPAddress
+ Port
。参数按不同的顺序指定。
$ python myfile.py -p 123 -ip 124.45.67.89
DNumber:2000 IP:124.45.67.89 Port:123
默认DNumber
和IPAddress
,覆盖Port
$ python myfile.py -p 500
DNumber:2000 IP:159.142.32.30 Port:500
你的想法...
为旗/ ARGS关系的语法,我也不知道是否有一个特定的语法python需要你使用(即-p 500
与-p500
v -p=500
)
参数的语法不是特定于Python,但通常遵循GNU C'getopt'操作。 – theorifice
_“但似乎不允许依赖于标志来表示其目的的可选参数”_似乎并不是你需要的。 – Arnial
“似乎不允许依赖于标志来表示其目的的可选参数” - 您的意思是像'-p 123'中的'123'吗? argparse处理。 – user2357112