问题描述
我想写一个小 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 &
这将使您的脚本在后台运行。