如何在Python中创建内存中的文件句柄并传递给外部命令
我有一个小的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这边,打开同一个管道进行写入,写入一些内容后关闭管道。子进程接收到管道中的内容,就像是从一个真实的文件中读取到的那样继续执行。