我只需要将部分文件发送到另一个进程的STDIN中吗?
#Python 3.5
from subprocess import PIPE, Popen, STDOUT
fh = io.open("test0.dat", "rb")
fh.seek(10000)
p = Popen(command, stdin=fh, stdout=PIPE, stderr=STDOUT)
p.wait()
如何确保command
只从stdin中读取1000多个字节,然后遇到EOF。
我无法控制命令如何读取标准输入。
答案 0 :(得分:3)
问题是,当传递一个句柄时,Popen尝试获取fileno
,并使用真正的操作系统句柄,因此不可能轻易地用其他类似文件的对象来欺骗它。
但是你可以将Popen
stdin
设置为PIPE
,在你选择的节奏中只写入正确的字节数,可能是小块,然后关闭< / p>
import io
from subprocess import PIPE, Popen, STDOUT
fh = io.open("test0.dat", "rb")
fh.seek(10000)
p = Popen(command, stdin=PIPE, stdout=PIPE, stderr=STDOUT)
p.stdin.write(fh.read(1000))
# do something & write again
p.stdin.write(fh.read(1000))
# now it's enough: close the input
p.stdin.close()
p.wait()
但请注意:由于stdin
和stdout
使用PIPE
,您必须使用stdout
以避免死锁。