我看了其他类似的问题,但未能找到我的问题的答案。
这就是我想要执行的内容:
public void printToScreenNew() {
Generation newGen = newGen();
System.out.print(newGen.toString());
System.out.println("\n");
}
到目前为止,这是我的代码:
gagner -arg1 < file1
目前,如果我运行此代码,则没有任何反应。我没有错误,但也没有打印输出。
有人可以告诉我如何使用python执行上面的linux命令。
答案 0 :(得分:0)
您不应将名称传递给流程(它希望从stdin
读取文件数据,而不是文件名称);相反,传递文件句柄本身(或使用PIPE
原始文件数据。)
所以你可以这么做:
with open(fileNameStringForm, 'rb') as f:
process = subprocess.Popen(['gagner','-arg1'], stdin=f, stdout=subprocess.PIPE, stderr=subprocess.PIPE)
stdout, stderr = process.communicate()
或效率稍差(因为Python必须读取它,然后编写它,而不是直接读取进程):
process = subprocess.Popen(['gagner','-arg1'], stdin=subprocess.PIPE, stdout=subprocess.PIPE, stderr=subprocess.PIPE)
with open(fileNameStringForm, 'rb') as f:
stdout, stderr = process.communicate(f.read())
请注意,我从两次调用中删除了shell=True
;使用list
命令形式消除了需求,并且它更快,更安全,更稳定,以避免shell包装。