Блок подпроцесса Python - PullRequest
       33

Блок подпроцесса Python

1 голос
/ 05 мая 2010

У меня проблема с подпроцессом модуля; Я запускаю скрипт из 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 ]

3 голосов
/ 05 мая 2010

Сценарий, который вы выполняете, run_pythia.sh гарантированно завершит выполнение? Если нет, вы можете не использовать методы блокировки, такие как communicate(). Возможно, вы захотите изучить взаимодействие с дескрипторами файлов .stdout, .stderr и .stdin возвращаемого процесса самостоятельно (в неблокирующей манере).

Кроме того, если вы все еще хотите использовать communicate(), вам нужно было передать объект subprocess.PIPE в аргументы конструктора Popen.

Прочтите документацию на модуле для получения более подробной информации.

0 голосов
/ 05 мая 2010

Может быть, вы можете попытаться сделать след на нем:

import pdb; pdb.set_trace()
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...