循环中的communication()失败

时间:2018-11-26 13:17:35

标签: python python-2.7

data.DataLoader

我正在通过使用if (newConfig && newConfig.options && newConfig.options.interaction && newConfig.options.interaction.applyFilteringOnGrid && newConfig.options.interaction.applyFilteringOnGrid.searchFilters) { const gridFilters = Object.keys(newConfig.options.interaction.applyFilteringOnGrid.searchFilters); for (let i = 0; i < gridFilters.length; i++) { logger.log('Grid Filters used', {gridfilter: `${gridFilters[i]} filter`}); } } 触发from subprocess import Popen, PIPE import glob import time file_list=glob.glob(r'C:\Tony\files\*.txt') numFiles = len(file_list) p = Popen([r"C:\Tony\prog.bat"], stdin=PIPE) start_time = time.time() for x in range(0,numFiles): command = "run {" + file_list[x] + "} " p.communicate(input=command)[0] print("--- %s seconds ---" % (time.time() - start_time)) 来启动程序。我的程序知道接受.bat之类的命令,并且可以执行操作。

这对于第一次迭代很好用。但随后出现以下错误:

Popen

为什么文件被关闭?

1 个答案:

答案 0 :(得分:2)

请阅读文档Popen.communicate

它等待进程终止。

请勿循环使用它。

您可以使用:

import subprocess

process = subprocess.Popen(["grep", "hello"],
                           stdin=subprocess.PIPE, 
                           stdout=subprocess.PIPE)

process.stdin.write("hello\nhello world\nhella")

print process.communicate()[0]

process.stdin.close()