Python 子进程阻塞
我在使用一个叫做subprocess的模块时遇到了问题;我在用Python运行一个脚本:
subprocess.Popen('./run_pythia.sh', shell=True).communicate()
有时候它会卡住,脚本执行不完。之前我用的是.wait()
,但我换成了.communicate()
。不过问题还是没有解决。
首先,这个脚本会编译几个文件,然后执行一个文件:
run_pythia.sh
:
#!/bin/bash
#PBS -l walltime=1:00:00
./compile.sh
./exec > resultado.txt
compile.sh
:
O=`find ./ -name "*.o" | xargs`
# LOAD cernlib2005
module load libs/cernlib/2005
# Compile and Link
FC=g77
CERNLIBPATH="-L/software/local/cernlib/2005/lib -lpacklib"
$FC call_pyth_mix.f analise_tt.f $O $CERNLIBPATH -o exec
2 个回答
0
也许你可以试着对它进行跟踪:
import pdb; pdb.set_trace()
3
你执行的脚本,比如 run_pythia.sh
,能保证一定会执行完吗?如果不能,那你就不应该使用像 communicate()
这样的阻塞方法。你可能需要自己去处理返回的进程的 .stdout
、.stderr
和 .stdin
文件,这样可以避免阻塞。
另外,如果你还是想用 communicate()
,那么在创建 Popen
对象的时候,你需要传入 subprocess.PIPE
这个对象作为参数。
想了解更多细节,可以查看这个模块的 文档。