有人能告诉我如何在 python 脚本上为参数编写条件吗?如果它使用第二个命令行参数运行,我希望它打印“Argument2 Entered”,例如:
python script.py argument1 argument2
如果它在没有命令行参数的情况下运行,则打印“No second argument”,如下所示:
python script.py argument1
这可能吗?
有人能告诉我如何在 python 脚本上为参数编写条件吗?如果它使用第二个命令行参数运行,我希望它打印“Argument2 Entered”,例如:
python script.py argument1 argument2
如果它在没有命令行参数的情况下运行,则打印“No second argument”,如下所示:
python script.py argument1
这可能吗?
import sys
if len(sys.argv)==2: # first entry in sys.argv is script itself...
print "No second argument"
elif len(sys.argv)==3:
print "Second argument"
对此有很多答案,具体取决于您想要做什么以及您可能需要多少灵活性。
最简单的解决方案是检查变量sys.argv
,它是一个包含所有命令行参数的列表。(它还包含脚本的名称作为第一个元素。)为此,只需查看len(sys.argv)
并根据其值更改行为。
但是,对于人们期望命令行程序执行的操作而言,这通常不够灵活。例如,如果您想要一个标志 ( -i
, --no-defaults
, ...),那么如何用 just 编写一个标志并不明显sys.argv
。对于参数 ( --dest-dir="downloads"
) 也是如此。因此,人们编写了许多模块来简化这种参数解析。
内置解决方案是argparse
,它功能强大且非常易于使用,但不是特别简洁。
一个聪明的解决方案是plac
,它检查main
函数的签名以尝试推断命令行参数应该是什么。
以下块应该是不言自明的
$ ./first.py second third 4th 5th
5
$ cat first.py
#!/usr/bin/env python
import sys
print (len(sys.argv))
这与许多其他帖子有关,具体取决于您的去向,因此我将在此处放置四个:
获取/解析传递给 Python 脚本的命令行参数的最佳方法是什么?
实现“[command] [action] [parameter]”风格的命令行界面?
如何在 Python 中处理命令行参数?
如何使用 Python 的 optparse 格式化位置参数帮助?
但是 Python 文档对您的问题的直接回答:
sys.argv - 传递给 Python 脚本的命令行参数列表。argv[0] 是脚本名称(它是否为完整路径名取决于操作系统)。如果命令是使用解释器的 -c 命令行选项执行的,则 argv[0] 设置为字符串“-c”。如果没有将脚本名称传递给 Python 解释器,则 argv[0] 是空字符串。要遍历标准输入或命令行上给出的文件列表,请参阅 fileinput 模块。
在 Python 中有很多方法可以完成这个简单的事情。如果您有兴趣了解比我推荐的更多信息,请阅读本文。顺便说一句,我在下面给你一个解决方案:
import click
'''
Prerequisite: # python -m pip install click
run: python main.py ttt yyy
'''
@click.command(context_settings=dict(ignore_unknown_options=True))
@click.argument("argument1")
@click.argument("argument2")
def main(argument1, argument2):
print(f"argument1={argument1} and argument2={argument2}")
if __name__ == '__main__':
main()