如何在Python中创建内存中的文件句柄并传递给外部命令

1 投票
1 回答
1572 浏览
提问于 2025-04-17 08:53

我有一个小的Python脚本,运行在Linux上,它会在用户的$HOME目录下创建一个名为/environ_script.sh的文件,然后通过以下命令在他们的终端中加载环境:

subprocess.call('bash --rcfile /home/user/environ_script.sh')

这个脚本运行得很好,但我在想,是否可以不写入磁盘就完成这个操作?就像bash的进程替换命令一样:

foo <(command)

这个命令可以把"command"的输出作为foo的输入,通过一个临时的文件句柄/dev/fdx,因为foo需要一个文件句柄作为输入。

1 个回答

3

我觉得你想要的是一种叫做命名管道的东西。这是一种进程间通信的方式,可以像文件一样使用,但它并不会写入硬盘。

import subprocess
import os

fifo_name = 'my-bash.rc'
os.mkfifo(fifo_name)

try:
    process = subprocess.Popen(['bash', '--rcfile', fifo_name])
    with open(fifo_name, 'w') as f:
        f.write('echo "This is my-bash.rc"')
    process.wait()
finally:
    os.remove(fifo_name)

在上面的例子中,创建了一个命名管道,并把它传递给子进程,让子进程打开它进行读取。在Python这边,打开同一个管道进行写入,写入一些内容后关闭管道。子进程接收到管道中的内容,就像是从一个真实的文件中读取到的那样继续执行。

撰写回答