有人能告诉我如何在python脚本上为参数编写条件吗?如果它使用第二个命令行参数运行,我希望它打印“Argument2 Entered”,如:
python script.py argument1 argument2
如果没有命令行参数运行,则打印“No second argument”,如下所示:
python script.py argument1
这可能吗?
答案 0 :(得分: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"
答案 1 :(得分:2)
对此有很多答案,具体取决于您想要做什么以及您可能需要多大的灵活性。
最简单的解决方案是检查变量sys.argv
,它是一个包含所有命令行参数的列表。 (它还包含脚本的名称作为第一个元素。)为此,只需查看len(sys.argv)
并根据其值更改行为。
但是,对于人们期望命令行程序来说,这通常不够灵活。例如,如果您想要一个标记(-i
,--no-defaults
,...),那么仅使用sys.argv
编写标记并不明显。对于参数(--dest-dir="downloads"
)也是如此。因此,人们编写了许多模块来简化这种参数解析。
内置解决方案是argparse
,它功能强大且易于使用,但不是特别简洁。
一个聪明的解决方案是plac
,它检查main
函数的签名,试图推断出命令行参数应该是什么。
答案 2 :(得分:1)
以下区块应该是自我解释的
$ ./first.py second third 4th 5th
5
$ cat first.py
#!/usr/bin/env python
import sys
print (len(sys.argv))
答案 3 :(得分:1)
这与许多其他帖子有关,取决于你要去哪里,所以我会在这里放四个:
What's the best way to grab/parse command line arguments passed to a Python script?
Implementing a "[command] [action] [parameter]" style command-line interfaces?
How can I process command line arguments in Python?
How do I format positional argument help using Python's optparse?
但是从Python文档直接回答你的问题:
sys.argv - 传递给Python脚本的命令行参数列表。 argv [0]是脚本名称(无论这是否是完整路径名,它依赖于操作系统)。如果使用解释器的-c命令行选项执行命令,则将argv [0]设置为字符串'-c'。如果没有脚本名称传递给Python解释器,则argv [0]为空字符串。 要循环标准输入或命令行上给出的文件列表,请参阅fileinput模块。