Python 子进程阻塞

1 投票
2 回答
2085 浏览
提问于 2025-04-15 22:21

我在使用一个叫做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 这个对象作为参数。

想了解更多细节,可以查看这个模块的 文档

撰写回答