Python子进程块
我对模块子流程有问题;我正在运行一个Python脚本:Python子进程块,python,subprocess,wait,blocking,communicate,Python,Subprocess,Wait,Blocking,Communicate,我对模块子流程有问题;我正在运行一个Python脚本: subprocess.Popen('./run_pythia.sh', shell=True).communicate() 有时它只是阻塞,无法完成脚本的执行。在我使用.wait()之前,但是我。然而,问题仍然存在 首先,脚本编译几个文件,然后执行到一个文件中: 运行_pythia.sh: #!/bin/bash #PBS -l walltime=1:00:00 ./compile.sh ./exec > resultado.tx
subprocess.Popen('./run_pythia.sh', shell=True).communicate()
有时它只是阻塞,无法完成脚本的执行。在我使用.wait()
之前,但是我。然而,问题仍然存在
首先,脚本编译几个文件,然后执行到一个文件中:
运行_pythia.sh
:
#!/bin/bash
#PBS -l walltime=1:00:00
./compile.sh
./exec > resultado.txt
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
compile.sh
:
#!/bin/bash
#PBS -l walltime=1:00:00
./compile.sh
./exec > resultado.txt
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()
您是否需要与流程进行交互?或者您只是在读取输出?您应该使用
.communicate()
,因为它可以防止任何死锁问题。但是,如果您需要通过向stdin写入数据并从stderr/stdout读取数据来与流程交互,那么这将是一个全新的过程。