Python:在NetBeans中将文件作为输入传递

时间:2015-11-14 04:36:26

标签: python netbeans

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运行。

1 个答案:

答案 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.txtwith open(sys.argv[1]) as infile: for line in infile: # ... ,则一种惯例是使用stdin来表示这些标准流,因此您可以编写程序代码以支持此功能:

stdout

也就是说,如果您需要支持旧的处理方式,您可以编写程序以将-理解为“使用来自shell的标准流”。或者,如果没有给出命令行参数,则默认为此行为。