gpt4 book ai didi

python - 如何使 sys.argv 参数可选?

转载 作者:太空狗 更新时间:2023-10-29 18:23:27 27 4
gpt4 key购买 nike

sys.argv 在运行程序时在 shell 命令行中获取参数。如何使这些参数可选?

我知道我可以使用try - except。但这会强制您要么不插入额外参数,要么插入所有额外参数,除非您嵌套更多 try - except 这会使代码看起来更难阅读。

编辑

假设我想要以下功能,我该如何实现?

$ python program.py add Peter 
'Peter' was added to the list of names.

这个add 参数(而不是--add)是可选的

$ python program.py

只是正常运行程序。

最佳答案

编辑解决您的编辑问题,

import sys

sys.argv = sys.argv[1:]
names = []
while sys.argv and sys.argv[0] == 'add':
#while the list is not empty and there is a name to add
names.append(sys.argv[1])
print sys.argv[1], 'was added to the list of names.'
sys.argv = sys.argv[2:]

以下所有的工作

$ python program.py add Peter
Peter was added to the list of names.

$ python program.py add Peter add Jane
Peter was added to the list of names.
Jane was added to the list of names.

$ python program.py

如果在每个名称前要求“添加”的优点是,如果您在添加名称后想要查找任何其他参数,则可以。如果您想通过说 python program.py add Peter Jane 来传递多个名称,这可以通过相当简单的更改来完成

import sys

names = []
if len(sys.argv) > 2 and sys.argv[1] == 'add':
names = sys.argv[2:]

for n in names:
print n, 'was added to the list of names.'

原创

似乎使用 optparse 之类的东西会更好。然而,由于 sys.argv 是一个列表,您可以检查它的长度。

arg1 = sys.argv[1] if len(sys.argv) > 1 else 0 # replace 0 with whatever default you want
arg2 = sys.argv[2] if len(sys.argv) > 2 else 0

然后使用 arg1 和 arg2 作为您的“可选”命令行参数。这将允许您传递 1、2 或 0 个命令行参数(实际上您可以传递超过 2 个,它们将被忽略)。这还假定参数具有已知顺序,如果您想使用 -a 之类的标志后跟一个值,请查看 optparse http://docs.python.org/library/optparse.html?highlight=optparse#optparse

关于python - 如何使 sys.argv 参数可选?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11853508/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com