-1

有人能告诉我如何在 python 脚本上为参数编写条件吗?如果它使用第二个命令行参数运行,我希望它打印“Argument2 Entered”,例如:

python script.py argument1 argument2

如果它在没有命令行参数的情况下运行,则打印“No second argument”,如下所示:

python script.py argument1

这可能吗?

4

5 回答 5

3
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"
于 2013-01-15T15:48:22.520 回答
2

对此有很多答案,具体取决于您想要做什么以及您可能需要多少灵活性。

最简单的解决方案是检查变量sys.argv,它是一个包含所有命令行参数的列表。(它还包含脚本的名称作为第一个元素。)为此,只需查看len(sys.argv)并根据其值更改行为。

但是,对于人们期望命令行程序执行的操作而言,这通常不够灵活。例如,如果您想要一个标志 ( -i, --no-defaults, ...),那么如何用 just 编写一个标志并不明显sys.argv。对于参数 ( --dest-dir="downloads") 也是如此。因此,人们编写了许多模块来简化这种参数解析。

内置解决方案是argparse,它功能强大且非常易于使用,但不是特别简洁。

一个聪明的解决方案是plac,它检查main函数的签名以尝试推断命令行参数应该是什么。

于 2013-01-15T15:52:40.427 回答
1

以下块应该是不言自明的

$ ./first.py second third 4th 5th
5
$ cat first.py 
#!/usr/bin/env python

import sys

print (len(sys.argv))
于 2013-01-15T15:50:00.443 回答
1

这与许多其他帖子有关,具体取决于您的去向,因此我将在此处放置四个:

获取/解析传递给 Python 脚本的命令行参数的最佳方法是什么?
实现“[command] [action] [parameter]”风格的命令行界面?
如何在 Python 中处理命令行参数?
如何使用 Python 的 optparse 格式化位置参数帮助?

但是 Python 文档对您的问题的直接回答:

sys.argv - 传递给 Python 脚本的命令行参数列表。argv[0] 是脚本名称(它是否为完整路径名取决于操作系统)。如果命令是使用解释器的 -c 命令行选项执行的,则 argv[0] 设置为字符串“-c”。如果没有将脚本名称传递给 Python 解释器,则 argv[0] 是空字符串。要遍历标准输入或命令行上给出的文件列表,请参阅 fileinput 模块。

于 2013-01-15T15:52:45.680 回答
1

在 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()
于 2021-08-12T18:09:00.540 回答