我正在尝试编写一个脚本,它调用一个python程序,暂停直到程序输出某个消息(而不是程序结束时),然后继续前进。
如果我有一个这样的example.py,它无限期地运行:
doSomething()
print('I did something')
doSomethingElseForever()
我想要一个这样的脚本:
echo "Running python program"
python3 example.py &
waitForOutput("I did something")
echo "Python program did something, it's still running in the background"
doSomeMoreScriptStuff
理想情况下,我只需要运行脚本,它就会启动example.py,暂停直到example.py输出“I did something”,然后继续启动更多的程序或其他程序,而不会停止example.py(因此会出现&)。
顺便说一句,我在Ubuntu工作。
编辑:我认为在我的特定应用程序中,我可以修改我的python脚本来创建一个文件,而不是print(),但是为了学习(因为这似乎是一种复杂的操作方式),让我们假设我不能编辑python文件,所以我所要处理的就是print()语句的已知输出。
1条答案
按热度按时间x7yiwoj41#
你可以用
pexpect
来实现这一点。我启动一个线程,它调用pexpect.spawn()
来运行你的子脚本。它等待你想要的输出,然后设置一个事件,这样主程序就知道事件已经发生了。然后它等待子脚本退出,这反过来又允许主程序退出:我使用这个
example.sh
作为Python脚本的模型,您可以调用它:日志如下: