首页 > 解决方案 > 用python读取另一个程序的输出

问题描述

所以假设我打开 CMD 或 PowerShell 并输入

ping google.com -t

我会收到源源不断的 ping。(我显然也可以编写一个在 python 中获取 ping 的脚本,但这不是问题,我只想知道如何在理论上做到这一点。)我现在想做的是编写一个 python 脚本,从CMD 并将它们打印出来,现场直播。这甚至可能吗?

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

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

总结:一个外部程序,它的 UI 是一个命令行,或者它的日志被打印到 CMD 或类似的程序中,我想得到这个程序打印出来的所有东西。

标签: pythonpython-3.xcmd

解决方案


在 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

所以你得稍微清理一下。


推荐阅读