我的模块子进程有问题;我正在从 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
你执行的脚本,
run_pythia.sh
保证执行完成吗?如果没有,您可能不想使用像 communicate()
这样的阻止方法。您可能想研究一下与返回的进程句柄的 .stdout
、.stderr
和 .stdin
文件句柄进行交互(以非阻塞方式)。
此外,如果您仍然想使用
communicate()
,您需要将 subprocess.PIPE
对象传递给 Popen
的构造函数参数。
阅读模块上的文档以了解更多详细信息。
也许你可以尝试在上面做一个痕迹:
import pdb; pdb.set_trace()