&1|find "Pa-6ren">
gpt4 book ai didi

python - 当命令从命令提示符正确执行时,在 subprocess.call() 中使用 find 会出错

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

C:\Windows\System32> ffmpeg -i D:\devaraj\KPIX_test.ts -vf "blackframe" -an -f n
ull - 2>&1|find "Parsed" > D:\devaraj\info.txt

这工作正常,写入文件 info.txt
subprocess.call('ffmpeg' ,'-i', 'D:\devaraj\KPIX_test.ts' ,'-vf', '"blackframe"', 'D:\devaraj\KPIX_textfinal.mp3', '- 2>&1>','|','find', '"Parsed"', '>' ,'D:\devaraj\info.txt', 'shell=True')

给出错误缓冲区大小必须是整数

就像
subprocess.call('ffmpeg -i D:\devaraj\KPIX_test.ts -vf "blackframe" -an -f n
ull - 2>&1|find "Parsed" > D:\devaraj\info.txt', shell=True)

给出错误

'find' 未被识别为内部或外部命令,
可运行的程序或批处理文件。

任何帮助将不胜感激

最佳答案

你应该使用原生 python 方法来过滤 ffmpeg输出:

ffmpeg -i D:\devaraj\KPIX_test.ts -vf "blackframe" -an -f null - 2>&1|find "Parsed"

为此,您通常需要 check_output但是这个特定的例子已知会提供所需的信息,但会以非零返回码退出(尽管使用 Python 3.5 中的 run 会起作用)

所以我将使用 Popen反而。它变成(作为列表,没有所有重定向和过滤器),然后从进程标准输出中读取所有输出:
p = subprocess.Popen(["ffmpeg","-i",r"D:\devaraj\KPIX_test.ts",
"-vf","blackframe","-an","-f","null"],stdout=subprocess.PIPE,stderr=subprocess.STDOUT)
output = p.stdout.read()

你不需要 shell=True ,它在 output 中合并错误和输出流多变的。

现在 output包含 ffmpeg 命令的输出。让我们对其进行解码(以获取字符串)并拆分行,检查字符串是否在行中:
for line in output.decode().splitlines():  # python 2: output.splitlines()
if "Parsed" in line:
print(line.rstrip()) # or store it in a file, string, whatever

对于输出更多文本的进程,最好在 p.stdout 上进行迭代而不是读取全部内容(更少的内存占用,允许实时回显到控制台)

关于python - 当命令从命令提示符正确执行时,在 subprocess.call() 中使用 find 会出错,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49028807/

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