[英]“sys.argv[x]” is out of range
我必须运行确切的命令:
python3 main.py flip pattern.ppm > flippedpattern.ppm
在以下代码上:
def main(args):
if sys.argv[1] == "flip":
fileName = sys.argv[2]
method = read_ppm(fileName)
print(method.flip())
return
if __name__ == '__main__':
sys.exit(main(sys.argv))
我有一个ppm文件,正在尝试使用另一个模块进行操作,但是在将其分配给变量'outputFile'时,它始终告诉我sys.argv [4]超出范围。
对于flip命令,执行的代码本质上应该是这个
method = "flip"
method = read_ppm("pattern.ppm")
f.write(method.flip())
确实在Visual Studio中使用repl会成功,但是当我尝试通过命令行通过主模块运行它时,它将无法工作。 为什么是这样? “>”字符会以某种方式干扰sys.argv还是我在做出看不见的计数错误?
else语句将说明输入没有捕获,而只是使用输入进行打印
python3 main.py flip pattern.ppm
没有任何文件重定向。
>之后的参数不是传递给python的命令行的一部分。 这是外壳程序将标准输出写入的文件。 因此,例如, print "Hello"
将Hello写入flippedpattern.ppm。
如果要将flippedpattern.ppm用作第四个命令行参数,只需在调用中省略>。 (然后,标准输出将写入屏幕。)
编辑:给定修改后的描述,您可以编写sys.stdout.write(method.flip())
。 这和print(method.flip())
之间的唯一区别是,print在字符串的末尾添加了换行符,而.write则没有。
我不确定Visual Studio是如何工作的,但是如果它与argv[4]
一起工作,它可能像另一个参数一样解释脚本名称之后的每个单词(因为对“>”进行特殊解释不是bash)。
因此,要使其从bash开始工作,您可能应该将代码中的argv[4]
更改为argv[3]
,并将输出文件作为另一个参数传递,而不是重定向:
python main.py flip pattern.ppm flippedpattern.ppm
,或保留代码不变,并添加“ dummy”第三个参数,以使输出文件为第4个,例如,也强制其将“>”视为常规参数:
python3 main.py flip pattern.ppm ">" flippedpattern.ppm
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.