【发布时间】:2021-12-06 21:11:57
【问题描述】:
我正在尝试编写一个调用 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 输出“我做了某事”,然后继续启动更多程序或其他什么,而不停止 example.py(因此 & )。
我在 Ubuntu BTW 中工作。
编辑:我认为目前在我的特定应用程序中,我可以更改我的 python 脚本来创建文件而不是 print(),但是为了学习(而且因为这似乎是一种复杂的做事方式) ,假设我无法编辑 python 文件。所以我需要处理的只是 print() 语句的已知输出。
【问题讨论】:
-
我注意到您添加了python 标签,那么您愿意接受 Python 中的解决方案吗?如果是这样,天真的答案就是分解 Python 脚本,但假设
doSomething和doSomethingElseForever没有任何相互依赖关系。 -
我之前看到过那个帖子,但我认为这不是我想要的。第一个答案不是我想要的,因为(我认为)它正在检查文件中的更改,这不是我正在做的,第二个答案可能有效,但我很难弄清楚如何在我的上下文中使用它。不幸的是,我无法将 doSomething() 和 doSomethingElseForever() 分开,因为我实际上正在寻找的消息是确认无限期运行的进程已经开始。
-
你为什么不改变你的 Python 脚本,让它在完成第一件事后创建一个文件?然后您的 shell 脚本可以简单地等待该文件存在。
-
@Josh 我认为最重要的两个答案是说您可以将进程的输出重定向到一个文件,然后使用
tail -f ... | grep -q ...观察输出。虽然我自己从来没有做过这样的事情。万一这些解决方案都不适合您,您可以edit 解释和强调您的情况有何不同。