gpt4 book ai didi

python - 如何在 Python3 中使用子进程生成字符串输出

转载 作者:太空宇宙 更新时间:2023-11-04 04:43:20 24 4
gpt4 key购买 nike

我有一个脚本可以在本地保存 5 秒长的视频,它省略了文件名。

这是 bash 命令

ffmpeg -i http://0.0.0.0:8080/stream/video.mjpeg -vcodec copy -map 0 -f segment -segment_time 2 -loglevel 40 -segment_format mp4 capture-%05d.mp4 2>&1 | grep --line-buffered -Eo "segment:.+ended" | gawk -F "'" '{print $2; system("")}' | xargs -n1 

如果我在终端中运行这个命令,它会返回预期的文件名

capture-00001.mp4

请注意,末尾的 xargs 命令很容易让我将文件名作为新参数传递给 python 脚本。但现在我想在 Python 本身中执行此命令,特别是使用 subprocess 获取文件名。

这是我到目前为止所做的。运行脚本时,正如预期的那样,终端将打印文件名,但它不会将其作为字符串传递给 fName。我试过 subprocess.check_output 但它从未传递任何内容,因为该命令不断捕获视频并将其保存在本地。

FFMPEG_SCRIPT = r"""ffmpeg -i http://0.0.0.0:8080/stream/video.mjpeg -vcodec copy -map 0 -f segment -segment_time 2 -loglevel 40 -segment_format mp4 capture-%05d.mp4 2>&1 | grep --line-buffered -Eo "segment:.+ended" | gawk -F "'" '{print $2; system("")}' | xargs -n1 """

try:
fName = subprocess.check_call(FFMPEG_SCRIPT, stderr=subprocess.STDOUT, shell=True).decode('utf-8')
print(">>> {}".format(fName))
except subprocess.CalledProcessError as e:
print(e.output)

最佳答案

import subprocess
from subprocess import PIPE

fName = subprocess.Popen("test.bat", stdin=PIPE, stdout=PIPE)
(stdout, stderr) = fName.communicate()
print(">>> {}".format(fName))
print(stdout)

test.bat 是一个简单的 echo yes 因为我无法用你的脚本进行测试,而 print(stdout) 的结果输出是 b'是\r\n'。如果文件名是脚本打印的唯一内容,那么提取它应该不会太难。

关于python - 如何在 Python3 中使用子进程生成字符串输出,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50147470/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com