Python是否有一个argc参数?


78

我已经用C和C ++编写了相同的程序(打开文本文件并显示内容)。现在在Linux机器上用Python做同样的事情。

在C程序中,我使用了代码:

if (argc != 2) {
    /* exit program */
}

问题:Python用什么来检查参数数量

#!/usr/bin/python
import sys
try:
    in_file = open(sys.argv[1], "r")
except:
    sys.exit("ERROR. Did you make a mistake in the spelling")
text = in_file.read()
print text
in_file.close()

电流输出:

./python names.txt = Displays text file (correct)
./python nam = error message: stated from the sys.ext line (correct)
./python = error message: stated from the sys.ext line (wrong: want it to be a
separate error message stating *no file name input*)


从面向对象的角度,我可以理解为什么argc应该耦合到argv。如果这是两个对象,则它们可以相互依赖地进行突变。argc是argv的属性(而不是sys)是有意义的,我只是不确定len是我将使用的实际属性名称。argv .__ len__出于机械方面的原因很关键,并且从那里开始给它起个其他名字没有多大的意义。我可能会赞成SYS代理描述一样sys.argc = property(lambda self: len(self.argv)).__get__(sys, sys.__class__),虽然
ThorSummoner

Answers:


123

在python中,列表知道其长度,因此您只需len(sys.argv)获取中的元素数即可argv


import sys#count arguments arguments arguments = len(sys.argv)-1打印(“使用%i arguments调用脚本”%(arguments))
Teo

17

我经常使用快速n脏技巧从命令行读取固定数量的参数:

[filename] = sys.argv[1:]

in_file = open(filename)   # Don't need the "r"

filename如果没有确切的一个参数,这将为其分配一个参数并引发异常。



0

dir(sys)说不。len(sys.argv)可以,但是在Python中,要求宽恕比允许更好,因此

#!/usr/bin/python
import sys
try:
    in_file = open(sys.argv[1], "r")
except:
    sys.exit("ERROR. Can't read supplied filename.")
text = in_file.read()
print(text)
in_file.close()

可以正常工作并且更短。

如果您还是要退出,那就更好了:

#!/usr/bin/python
import sys
text = open(sys.argv[1], "r").read()
print(text)

我正在使用print()它,因此它可以在2.7和Python 3中使用。


在Python的大多数情况下,我喜欢“请求宽容胜于允许”。但是对于命令行参数,可以说更好的用户体验是,如果存在错误数量的参数,则显示Python脚本所需的命令行参数。
DoomGoober

@DoomGoober“提供的文件名”是它期望的参数。
Cees Timmerman
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.