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

我对模块子流程有问题;我正在运行一个Python脚本:

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读取数据来与流程交互,那么这将是一个全新的过程。