Допустим, я открываю CMD или PowerShell и ввожу
ping google.com -t
Я получу постоянный поток пингов. (Очевидно, я мог бы также написать скрипт, который получает пинги внутри python, но это не проблема, я просто хочу знать, как это сделать в теории.) Что я хочу сделать сейчас, так это написать скрипт python, который получает эти выходные данные от CMD и распечатывает их в прямом эфире. Это вообще возможно?
Пример: я запускаю сервер, который печатает журналы в командной строке, и я хочу прочитать и сохранить их (я знаю часть сохранения, только получение - моя проблема)
Пример 2: я запускаю свой кошелек monero (не графический интерфейс, версия для командной строки) и мне нужен скрипт, который уведомляет меня, когда деньги отправляются.
Подводя итог: запущена внешняя программа, пользовательский интерфейс которой представляет собой командную строку или журналы которой выводятся в CMD или аналогичные программы, и я хочу получить все, что эта программа выводит.
@SiHa, насколько я понимаю, мне нужно вызвать программу из Python, чтобы она работала. Если возможно, я просто хочу ввести PID из диспетчера задач и прочитать вывод уже запущенной программы, которая работает в командной строке (например, кошелек monero из командной строки) или что-то в этом роде.
Какая операционная система?
@MarkReedZ Windows на данный момент, позже мне также понадобится Ubuntu, но я думаю, что как только я узнаю, как это работает на одном, я смогу понять остальное (если вы знаете Linux, хотя вы также можете сказать мне)






В линуксе это самый простой способ. 9590 - это pid процесса, а -s говорит, что нужно записать 500 символов из каждой строки вывода (в противном случае он усекается).
import os
stream = os.popen("strace -ewrite -p 9590 -s 500")
while 1:
print( stream.readline() )
Вам нужно использовать sudo со strace
sudo python grab_output.py
Вывод с помощью ping google:
write(1, "64 bytes from 108.177.122.138 (108.177.122.138): icmp_seq=125 ttl=44 time=40.3 ms\n", 82) = 82
write(1, "64 bytes from 108.177.122.138 (108.177.122.138): icmp_seq=126 ttl=44 time=32.5 ms\n", 82) = 82
Так что придется немного почистить.
Это то, что вы хотите, или вы просите запустить ping вне Python и подключиться к выходу этого процесса?
последнее я думаю. запустите ping в cmd без python и скажите python, чтобы прочитать вывод этой командной строки
Я обновил ответ. То, что вы просите сделать, это «Использовать python для подключения к стандартному выводу запущенного процесса». Использование отладчика, такого как gdb, также сработает.
Отлично, спасибо. Есть ли аналогичный способ сделать это в Windows? Мне нужны оба, но я думаю, что Linux пока будет достаточно. В любом случае, спасибо!
Возможный дубликат Получение вывода subprocess.call()