使用python读取另一个程序的输出

时间:2019-03-07 16:11:22

标签: python python-3.x cmd

所以可以说我打开CMD或PowerShell,然后输入

ping google.com -t

我将不断收到ping信号。 (我显然也可以编写一个脚本来获取python中的ping信息,但这不是问题,我只想知道理论上如何做到这一点。)我现在想做的是编写一个python脚本,该脚本从python中获取这些输出。 CMD并实时打印出来。这有可能吗?

示例:我正在运行一台将日志打印到命令行的服务器,我想读取并保存它们(我知道保存部分,只是检索是我的问题)

示例2:我正在运行monero钱包(而不是gui,命令行版本),并且想要一个脚本,该脚本在汇款时通知我

总结:一个外部程序,其UI是一个命令行,或者其日志被打印到CMD或类似程序中,并且我想获取该程序打印出的所有内容。

1 个答案:

答案 0 :(得分:2)

在linux上,这是最简单的方法。 9590是进程的pid,-s表示从每条输出行写出500个字符(否则它会被截断)。

import os
stream = os.popen("strace -ewrite -p 9590 -s 500")
while 1:
  print( stream.readline() )

您需要在strace中使用sudo

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

所以您必须清理一下。