如何解决Python Popen() 被阻塞
我想写一个小 Python 脚本来自动创建 Jekyll 博客,但 popen()
似乎阻塞而不是异步调用。
预期的行为是:
- 异步启动
jekyll serve --livereload
- 启动
firefox-esr http://127.0.0.1:4000
异步并等待它(或同步,这与我的用例无关) - 在 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 上。 ping
或我尝试过的任何其他命令/程序都可以正常工作。
对我做错了什么有什么想法吗?
解决方法
如果您使用的是 Linux,则可以为其创建一个简单的 bash
脚本。
#!/bin/bash
jekyll serve --livereload &
sleep 5
firefox-esr http://127.0.0.1:4000 &>/dev/null
pid=$(pgrep firefox-esr)
while :
do
sleep 5
if [ -z "$pid" ]
then
pkill ruby 2>/dev/null
echo "Killed jekyll"
break
fi
done
授予此文件执行权限
chmod +x filename.sh
然后用
运行这个bash
脚本
./filename.sh &
这将使您的脚本在后台运行。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。