【发布时间】:2021-07-15 22:25:22
【问题描述】:
我想写一个小python脚本来自动创建 Jekyll 博客,但是popen() 似乎会阻塞而不是异步调用。
预期的行为是:
- 异步启动
jekyll serve --livereload - 启动
firefox-esr http://127.0.0.1:4000async 并等待它(或同步,这与我的用例无关) - firefox 终止后,也终止 Jekyll。
jekyll = subprocess.Popen(['jekyll', 'serve', '--livereload'])
print('This never gets displayed')
time.sleep(3)
firefox = subprocess.Popen(['firefox-esr', 'http://127.0.0.1:4000'])
firefox.wait()
jekyll.terminate()
但这只会启动 Jekyll 并将其标准输出输出到终端。
这个问题只出现在 Jekyll 中。 ping 或我尝试过的任何其他命令/程序都可以正常工作。
关于我做错了什么有什么想法吗?
【问题讨论】:
-
终端是否显示错误?
-
没有。它显示了 jekyll 标准输出。通过 ctrl+c 杀死 python 脚本时,如果有帮助,jekyll 进程不会终止。我很困惑,因为我用另一个软件做了一个完全相似的事情,它就像一个魅力。
-
你可以尝试任何其他命令而不是
Jekyll,它不会在终端中不断输出一些东西,并检查终端是否有输出/错误。你确定你有firefox-esr。 -
当反转命令时,firefox 启动,然后 jekyll 开始阻塞。使用
ping等其他命令我没有问题。您知道修补程序吗?也许编写一个只调用 jekyll 的 bash 脚本,我可以异步调用然后终止。这显然是 Jekyll 的问题。 -
我不知道有修补程序,但 bash 脚本可以提供帮助,甚至线程也可以提供帮助,但不确定。我会尝试在我的本地机器上做。
标签: python python-3.x asynchronous jekyll popen