"系统argv[x] “超出范围

2024-04-28 16:27:19 发布

您现在位置:Python中文网/ 问答频道 /正文

我必须运行确切的命令:

python3 main.py flip pattern.ppm > flippedpattern.ppm

根据以下代码:

^{pr2}$

我有一个ppm文件,我试图使用另一个模块来操作它,但它总是告诉我系统argv[4] 将其分配给变量“outputFile”时超出范围

对于flip命令,执行的代码基本上应该是这样的

method = "flip"
method = read_ppm("pattern.ppm")
f.write(method.flip())

在visualstudio中使用repl确实可以获得成功,但是当我试图从命令行通过主模块运行它时,它就不起作用了。为什么会这样?“>;”字符是否会干扰系统argv还是我犯了一个看不见的明显的计数错误?在

else语句将解释输入不被捕获,而只是使用输入进行打印

python3 main.py flip pattern.ppm

没有任何文件重定向。在


Tags: 模块文件代码py命令main系统method
2条回答

>;之后的参数不是传递给python的命令行的一部分。它是shell将标准输出写入的文件。例如,print "Hello"将向翻转模式.ppm. 在

如果你想的话翻转模式.ppm要成为第四个命令行参数,只需在调用中省略>。(然后,标准输出将写入屏幕。)

编辑:根据修改后的描述,您可以编写sys.stdout.write(method.flip())。它与print(method.flip())的唯一区别是print在字符串的末尾添加了一个换行符,而.write没有

我不确定visualstudio是如何工作的,但是如果它与argv[4]一起工作,它可能会像解释另一个参数一样解释脚本名称后面的每个单词(因为对“>;”进行特殊解释并不是bash)。在

因此,要使它在bash中工作,您可能应该将代码中的argv[4]更改为argv[3],并将输出文件作为另一个参数传递,而不是重定向:

python main.py flip pattern.ppm flippedpattern.ppm

,或者保持代码不变,并添加“伪”第三个参数,以便输出文件将是第四个,例如,强制它将“>;”也视为常规参数:

^{pr2}$

相关问题 更多 >