我正在向stdin写入大量数据。
我如何确保它不会阻塞?
p=subprocess.Popen([path],stdout=subprocess.PIPE,stdin=subprocess.PIPE) p.stdin.write('A very very very large amount of data') p.stdin.flush() output = p.stdout.readline()
p.stdin.write()我读了一个大字符串并将其写入后,似乎无法解决。
p.stdin.write()
我有大量的文件集,这些文件将被顺序写入stdin(> 1k个文件)
所以发生的事情是我正在运行一个循环
#this loop is repeated for all the files for stri in lines: p=subprocess.Popen([path],stdout=subprocess.PIPE,stdin=subprocess.PIPE) p.stdin.write(stri) output = p.stdout.readline() #do some processing
它以某种方式挂在文件号上。400.该文件是带有长字符串的大文件。
我确实怀疑这是一个阻碍性问题。
仅当我从0迭代到1000时才会发生这种情况。但是,如果我要从文件400开始,则不会发生错误
为避免以可移植的方式出现死锁,请在单独的线程中写入子代:
#!/usr/bin/env python from subprocess import Popen, PIPE from threading import Thread def pump_input(pipe, lines): with pipe: for line in lines: pipe.write(line) p = Popen(path, stdin=PIPE, stdout=PIPE, bufsize=1) Thread(target=pump_input, args=[p.stdin, lines]).start() with p.stdout: for line in iter(p.stdout.readline, b''): # read output print line, p.wait()
请参阅Python:从subprocess.communicate()读取流输入