Примечание: я знаю, что могу поймать subprocess
вывод, используя stdout=subprocess.PIPE
.
В моем случае subprocess
будет запущен импортированным модулем, например, youtube-dl
запустит subprocess
для ffmpeg
, и я хочу перехватить ffmpeg
вывод.
Я сделал фиктивный рабочий сценарий, чтобы прояснить мою точку зрения.
У меня есть 2 файла: m1.py "мой модуль" и m2.py "импортированная библиотека"
m2.py
import subprocess
def run():
print('m2 module message will be caught by echo function too')
cmd = ['ping', 'google.com']
subprocess.Popen(cmd)
m1.py
import sys
import m2
# this is a redirection function to echo stdout to a file
def echo(text):
with open('out.txt', 'a') as f:
f.write(text)
sys.stdout.write = original
sys.stdout.write(text)
sys.stdout.write = echo
original = sys.stdout.write
sys.stdout.write = echo
print('m1 module message will be caught by echo function')
m2.run()
Терминальный выход:
m1 module message will be caught by echo function
m2 module message will be caught by echo function too
Pinging google.com [172.217.18.46] with 32 bytes of data:
Reply from 172.217.18.46: bytes=32 time=86ms TTL=53
Reply from 172.217.18.46: bytes=32 time=78ms TTL=53
out.txt
m1 module message will be caught by echo function
m2 module message will be caught by echo function too
сверху видно, что из TXT-файл получил 2 оператора печати от обоих модулей, но не может получить другой вывод
Вопрос здесь, как я могу получить вывод команды «ping», запущенной m2.py, «точно не могу измените код m2.py, потому что это сторонняя библиотека, и она обновляется еженедельно "