我正在编写一个自动化的python脚本。
我需要运行一个linux shell命令(Program: dvbv5-zap
)并等待特定的命令输出 (DVR interface '/dev/dvb/adapter0/dvr0' can now be opened
). 当命令输出这个字符串时,python应该运行另一个shell程序。
我不知道如何捕获子进程Cli的输出,我试过用 .stdout.readline()
我运行了一个命令,其中包括 subprocess.Popen(['dvbv5-zap', 'args'], stdout=subprocess.PIPE)
我在这里找到了答案。https:/fredrikaverpil.github.io20131011catching-string-from-stdout-with-python。
代码片段。
# Imports
import os, sys, subprocess
# Build command
command = [ 'python', os.join.path('/path/to', 'scriptFile.py') ]
# Execute command
p = subprocess.Popen(command, stdout=subprocess.PIPE, stderr=subprocess.STDOUT)
# Read stdout and print each new line
sys.stdout.flush()
for line in iter(p.stdout.readline, b''):
# Print line
sys.stdout.flush()
print(">>> " + line.rstrip())
# Look for the string 'Render done' in the stdout output
if 'Render done' in line.rstrip():
# Write something to stdout
sys.stdout.write('Nice job on completing the render, I am executing myFunction()\n' )
sys.stdout.flush()
# Execute something
myFunction()