gpt4 book ai didi

shell 命令上的 Python 复杂字符串插值

转载 作者:行者123 更新时间:2023-12-01 01:56:23 25 4
gpt4 key购买 nike

我有一个想要使用 python 脚本执行的 shell 命令。它是 ffmpeggrepgawk 和其他几个 ffmpeg 选项的组合。

命令

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("")}'

如果您在终端上运行此命令,它应该返回一个字符串

capture-00001.mp4

现在,我的目标是在 Python3 上使用 subprocess 运行它。由于该命令相当复杂,带有混合单引号和双引号,因此需要正确处理它,否则它会提示扫描字符串文字时 EOL无效语法等。

我尝试了几种字符串格式化方法,但都不起作用。以下是我尝试过的方法之一。

脚本

import os
import datetime
import subprocess

first = "segment:.+ended"
second = "'"
third = '{print $2; system("")}'

if __name__ == "__main__":
fScript = "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 {} | gawk -F {} {}".format(first, second, third)
try:
result = subprocess.check_output(fScript, shell=True).decode('utf-8')
print(result)
except subprocess.CalledProcessError as e:
print(e.output)

最佳答案

感谢 @NathanBlaine 的建议,使用 r 标记字符串文字非常适合我的用例。每天总是很高兴学习新事物。 :)

但是,我无法使用 check_output 检索字符串结果。相反,subprocess.call 设法返回了预期的字符串。这是工作代码。

import os
import datetime
import subprocess


if __name__ == "__main__":
fScript = 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("")}'"""
try:
result = subprocess.call(fScript, stderr=subprocess.STDOUT, shell=True).decode('utf-8')
print(result)
except subprocess.CalledProcessError as e:
print(e.output)

关于shell 命令上的 Python 复杂字符串插值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50138249/

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