Python 子进程块

问题描述 投票:0回答:2

我的模块子进程有问题;我正在从 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
python subprocess wait blocking
2个回答
3
投票

你执行的脚本,

run_pythia.sh
保证执行完成吗?如果没有,您可能不想使用像
communicate()
这样的阻止方法。您可能想研究一下与返回的进程句柄的
.stdout
.stderr
.stdin
文件句柄进行交互(以非阻塞方式)。

此外,如果您仍然想使用

communicate()
,您需要将
subprocess.PIPE
对象传递给
Popen
的构造函数参数。

阅读模块上的文档以了解更多详细信息。


0
投票

也许你可以尝试在上面做一个痕迹:

import pdb; pdb.set_trace()
© www.soinside.com 2019 - 2024. All rights reserved.