是否可以从子进程中运行的命令中提取实时输出?
我想在我的脚本中使用名为wifite(https://github.com/derv82/wifite)的程序的输出。 Wifite应该在我的脚本中的子进程中运行 - 在特定时间,wifite将输出它的扫描结果并每秒更新它们(或接近它的东西)。我想在我的Raspberry Pi Adafruit液晶显示器上显示这条输出线。
所以我想做这样的事情:
wifite_scan = subprocess.Popen('./wifite.py', shell=True, stdout =PIPE)
wfite_scanOut= wifite_scan.communicate()
lcd.message(wifite_scanOut)
但这不起作用(纠正我,如果我错了)活着。
...要在我的lcd上获取此输出的最后一行:
1 Example1 7 WPA2 58db wps
2 Example2 6 WPA2 47db no
3 Example4 7 WPA2 47db no
4 Example5 1 WPA2 31db no
[0:00:11] scanning wireless networks. 4 targets and 0 clients found
此输出每5秒更新一次,并在控制台中使用新值发布相同的输出。所以我需要一种方法来在变量中每隔5秒获取最后一行。
什么是实现液晶显示器实时输出的最佳方式?
答案 0 :(得分:0)
曾经尝试pexpect?我已成功地将它与各种软件一起使用。
示例 - 使用mysql客户端计算test
的表的数量(必须至少有一个表不能中断):
child = pexpect.spawn('mysql')
child.expect('mysql>')
child.sendline('use test; show tables;')
child.expect('(\d+) row.* in set \(.*\)')
count_tables = child.match.groups()[0]
致电expect(expr)
后,您可以使用child.before
和child.buffer
检查缓冲区的内容。
答案 1 :(得分:0)
我不确定它是否适合你的问题(因为我不知道下标的输出是什么样的),但这可能是一个解决方案:
import subprocess
wifite_scan = subprocess.Popen('wifite.py', shell=True, stdout=subprocess.PIPE)
while True:
output = wifite_scan.stdout.readline()
if output == '':
# end of stream
print("End of Stream")
break
if output is not None:
# here you could do whatever you want with the output.
print("Output Read: "+output)
我用一个生成一些输出的简单文件尝试了上面的脚本:
# wifite.py
import time
for i in range(10):
print(i)
time.sleep(1)
为我工作。