El progtwig se atasca al usar subprocess.Popen () o subprocess.check_call ()

Quiero ejecutar un progtwig desde Python y encontrar su uso de memoria. Para ello estoy usando:

l=['./a.out','','out.txt'] p=subprocess.Popen(l,shell=False,stdout = subprocess.PIPE, stderr = subprocess.PIPE) p.wait() Res= getrusage(resource.RUSAGE_CHILDREN) print Res.ru_maxrss 

También intenté usar check_call(l,shell=False,stdout = subprocess.PIPE, stderr = subprocess.PIPE) y eliminar p.wait pero el problema es que el progtwig se está atascando en p.wait () cuando se usa Popen y check_call() cuando se usa check_call (). No puedo entender por qué está sucediendo esto. Es mi lista de argumentos equivocada

El comando ./a.out out.txt funciona bien en el terminal. Estoy usando Ubuntu

Hay dos problemas (al menos):

  1. < , > redirección es manejada por un shell. subprocess no genera un shell por defecto (usted tampoco debería)
  2. Si stdout=PIPE , stderr=PIPE entonces debe leer de las tuberías, de lo contrario el proceso puede bloquearse para siempre

Para hacer un subproceso leer desde un archivo y escribir en un archivo:

 from subprocess import check_call, STDOUT with open('in.txt') as file, open('out.txt', 'w') as outfile: check_call(["./a.out"], stdin=file, stdout=outfile, stderr=STDOUT) 

stderr=STDOUT fusiona stdout, stderr.

Está utilizando caracteres de redirección de shell en su llamada, pero cuando usa subprocess y configura shell=False , debe manejar esos conductos manualmente. Parece que estás pasando esos caracteres de redirección directamente como argumentos al progtwig a.out . Intenta ejecutar esto en tu shell:

 ./a.out '<' in.txt '>' out.txt 

Ver si a.out termina entonces también.