禁止在 python 子进程中输出文件

Suppress file output in a python subprocess

提问人:Ryuichi 提问时间:4/18/2023 更新时间:4/18/2023 访问量:35

问:

我有一个二进制可执行文件,当运行时会写入~10个左右的文件,并且还会写入stdout。 由于某种原因,程序不提供不写入任何这些文件的选项。

我想将此程序作为 python 子进程运行,但为了减少 I/O 操作,我想防止文件完全写入磁盘并仅收集 stdout。这可能吗?

我尝试使用 capture_output=True 和其他一些标志运行 subprocess.run,但没有任何运气。

提前感谢您的帮助!

python-3.x 文件 io

评论

0赞 Barmar 4/18/2023
除非它采用文件名作为参数,否则无法阻止它写入文件。它没有使用 stdout,所以与它无关。capture_output
0赞 Barmar 4/18/2023
如果它确实将它们作为参数,请使用它们作为文件名。/dev/null

答:

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 与子流程结合使用对我来说非常有效。非常感谢!