创建并通过管道传输类似文件的对象作为命令的输入

Jui*_*icy 5 python linux subprocess file

如果可能的话,我正在寻找更好的方法来做到这一点:

import subprocess

f = open('temp.file', 'w+')
f.write('hello world')
f.close()

out = subprocess.check_output(['cat', 'temp.file'])

print out

subprocess.check_output(['rm', 'temp.file'])
Run Code Online (Sandbox Code Playgroud)

在此示例中,我正在创建一个文件并将其作为输入传递给cat(实际上不是cat我正在运行,而是解析输入文件的其他程序pcap)。

我想知道的是,在 Python 中是否有一种方法可以创建一个包含某些内容的“类文件对象”,并将这个类文件对象通过管道作为命令行程序的输入。如果可能的话,我认为这比将文件写入磁盘然后删除该文件更有效。

Vin*_*ent 3

如果程序配置为读取stdin,则可以使用Popen.communicate

>>> from subprocess import Popen, PIPE
>>> p = Popen('cat', stdout=PIPE, stdin=PIPE, stderr=PIPE)
>>> out, err = p.communicate(input=b"Hello world!")
>>> out
'Hello world!'
Run Code Online (Sandbox Code Playgroud)