在不创建外部文本文件的情况下将终端输出捕获到 Pandas 数据帧中

tav*_*ndo 6 python terminal ffmpeg popen pandas

我正在使用 ffmpeg 的 extract_mvs 文件来生成一些文本信息。我会在终端中使用这样的命令:

/extract_mvs input.mp4 > output.txt
Run Code Online (Sandbox Code Playgroud)

我想将此命令与Popenpython 中的或其他子进程一起使用,以便将数据直接传递到 Pandas 数据帧而不是实际生成文本文件,而不是 output.txt。

这个想法是多次自动化,所以,我试图避免生成许多 .txt 文件,从而避免open()一个一个地生成它们。

我想到了这样的事情:

import subprocess
cmd = ['./extract_mvs', 'input.mp4']
a = subprocess.Popen(cmd, stdout=subprocess.PIPE)
df = pd.read_csv(a.communicate()[0], sep=',')
Run Code Online (Sandbox Code Playgroud)

但后来我收到一个错误: OSError: Expected file path name or file-like object, got <class 'bytes'> type

它可以固定和扩展以便直接从子进程读取到熊猫吗?

tav*_*ndo 5

我找到了一种解决方法,使用Keith 的部分答案和此处找到的答案,将信息从字符串传递到 Pandas 数据帧。

最终的工作代码是:

import sys
import subprocess
import pandas as pd

cmd = ['./extract_mvs', 'input.mp4']
a = subprocess.Popen(cmd, stdout=subprocess.PIPE)

if sys.version_info[0] < 3: 
    from StringIO import StringIO
else:
    from io import StringIO

b = StringIO(a.communicate()[0].decode('utf-8'))

df = pd.read_csv(b, sep=",")
Run Code Online (Sandbox Code Playgroud)