在NetBeans
中使用Python并将文件arguments
设置为input/output
时遇到一些问题。例如:
import re, sys
for line in sys.stdin:
for token in re.split("\s+", line.strip()):
print(token)
命令行使用python splitprog.py < input.txt > output.txt
效果很好。但是在NetBeans中,输出窗口只是等待,即使给出文件名(测试了许多组合)也没有任何事情发生。
项目属性中的Application Arguments
行(其中一个将为Java项目输入这些文件)似乎也没有使用,因为行为是相同的,无论是否有文件名/路径或不。在NetBeans中使用Python时,是否有一些技巧可以使这个工作或文件args无法使用?
ADD :根据@John Zwinck的建议,示例解决方案:
import re, sys
with open(sys.argv[1]) as infile:
with open(sys.argv[2], "w") as outfile:
for line in infile:
for token in re.split("\s+", line.strip()):
print(token, file = outfile)
参数文件在NB项目属性中设置。在命令提示符下,该程序现在只需python splitprog.py input.txt output.txt
运行。
答案 0 :(得分:1)
执行此操作时:
python splitprog.py < input.txt > output.txt
您正在将input.txt
重定向至stdin
的{{1}},将python
的{{1}}重定向至stdout
。您根本没有使用python
的命令行参数。
NetBeans does not support this.
相反,您应该将文件名作为参数传递,如下所示:
output.txt
然后在NetBeans中,您只需将命令行参数设置为splitprog.py
,它将与shell中的上述命令行相同。你需要稍微修改你的程序,也许是这样:
python splitprog.py input.txt output.txt
如果您仍想支持input.txt output.txt
和with open(sys.argv[1]) as infile:
for line in infile:
# ...
,则一种惯例是使用stdin
来表示这些标准流,因此您可以编写程序代码以支持此功能:
stdout
也就是说,如果您需要支持旧的处理方式,您可以编写程序以将-
理解为“使用来自shell的标准流”。或者,如果没有给出命令行参数,则默认为此行为。