Python脚本参数有条件

时间:2013-01-15 15:44:00

标签: python command-line

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

python script.py argument1 argument2

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

python script.py argument1

这可能吗?

4 个答案:

答案 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模块。