如何使用“<”重定向子进程中的文件?

时间:2016-03-19 02:57:07

标签: python-3.x tkinter

我看了其他类似的问题,但未能找到我的问题的答案。

这就是我想要执行的内容:

public void printToScreenNew() {
    Generation newGen = newGen();
    System.out.print(newGen.toString());
    System.out.println("\n");
}

到目前为止,这是我的代码:

gagner -arg1 < file1

目前,如果我运行此代码,则没有任何反应。我没有错误,但也没有打印输出。

有人可以告诉我如何使用python执行上面的linux命令。

1 个答案:

答案 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包装。