Bash tee命令在python中的复制行为

问题描述 投票:0回答:2

我有一些Bash脚本,我想在python中重新创建。这些脚本的主要功能之一是当我执行它们时它将终端的内容保存到日志文件中。在Bash中,我只是使用tee命令。

2>&1 | tee "logfile.txt";

问题是为python找到平等的解决方案。

到目前为止,我发现了这个难题的一半(解决方案A和B),一种预期的行为在其中一种脚本中起作用,而在另一种脚本中则无效,反之亦然。

解决方案A)

#!/usr/bin/env python3

import sys
from subprocess import Popen, PIPE, STDOUT


with Popen(['ffmpeg','-i','1.webm','-y','1.mp3'], stdout=PIPE, stderr=STDOUT, bufsize=1) as p, \
    open('logfile.txt', 'ab') as file:
    for line in p.stdout:
        sys.stdout.buffer.write(line)
        file.write(line)

解决方案B)

#!/usr/bin/env python3

import sys
from subprocess import Popen, PIPE


with Popen(['ffmpeg','-i','1.webm','-y','1.mp3'], stdout=PIPE, bufsize=1, universal_newlines=True) as p:
    logfile = open('logfile.txt', 'w')
    for line in p.stdout:
        print(line, end='')

我试图“合并”这两个代码段的功能,但是我无法弄清楚如何将它们组合在一起。

我正在寻找的是python脚本文件中tee命令的EXACT行为复制。这意味着...

  • 终端的内容显示在终端窗口AND中,并保存到日志文件中(与解决方案A相似)]] >>

  • 当我启动python脚本文件时,我想在终端中跟踪该过程的进度,以检查距完成有多远(就像解决方案B一样)。在此过程完成之前,我不想凝视空白屏幕(解决方案A)。

  • 我将非常感谢您的帮助。

    为了进行测试,我使用webm格式文件(与youtube-dl一起下载),并在cygwin中使用ffmpeg将其转换为mp3。您可以从此处下载ffmpeg二进制文件https://www.ffmpeg.org/download.html

谢谢!

我有一些Bash脚本,我想在python中重新创建。这些脚本的主要功能之一是当我执行它们时,它将把终端的内容保存到日志文件中。在...

python python-3.x bash tee
2个回答
0
投票
似乎可以解决此问题的方法是:

0
投票
© www.soinside.com 2019 - 2024. All rights reserved.