gpt4 book ai didi

python - 我可以覆盖 io.BufferedReader 中的默认 read() 方法吗?

转载 作者:太空宇宙 更新时间:2023-11-04 00:43:12 25 4
gpt4 key购买 nike

我只需要将文件的一部分发送到另一个进程的 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。我无法控制命令如何读取标准输入。

最佳答案

问题是,当传递一个句柄时,Popen 会尝试获取 fileno,并使用真正的操作系统句柄,因此不可能轻易地用其他类似文件的对象来欺骗它。

但是您可以将Popen stdin 设置为PIPE,只向其中写入正确数量的字节,可能是小块,在您选择的节奏,然后关闭它

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()

不过要小心:因为 stdinstdout 使用 PIPE,所以你必须使用 stdout 来避免死锁.

关于python - 我可以覆盖 io.BufferedReader 中的默认 read() 方法吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40920747/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com