提问人:Ryuichi 提问时间:4/18/2023 更新时间:4/18/2023 访问量:35
禁止在 python 子进程中输出文件
Suppress file output in a python subprocess
问:
我有一个二进制可执行文件,当运行时会写入~10个左右的文件,并且还会写入stdout。 由于某种原因,程序不提供不写入任何这些文件的选项。
我想将此程序作为 python 子进程运行,但为了减少 I/O 操作,我想防止文件完全写入磁盘并仅收集 stdout。这可能吗?
我尝试使用 capture_output=True 和其他一些标志运行 subprocess.run,但没有任何运气。
提前感谢您的帮助!
答:
0赞
Balaïtous
4/18/2023
#1
如果有足够的内存,可以使用 /dev/shm
。
$ df -h
tmpfs 16G 4,0K 16G 1% /dev/shm
假设您的二进制文件写入当前工作目录:
with tempfile.TemporaryDirectory(dir="/dev/shm") as workdir:
p = subprocess.run(("binary",), capture_output=True, cwd=workdir)
如果内存有问题,可以使用 LD_PRELOAD
覆盖 open
函数,并将写入重定向到 。/dev/null
评论
0赞
Ryuichi
4/18/2023
将 /dev/shm 与子流程结合使用对我来说非常有效。非常感谢!
评论
capture_output
/dev/null