2012-08-10 17 views
6

test1.py:Subprocess.poll() devuelve un valor falsamente

process = Popen(["python","test2.py"]) 
time.sleep(3) 

alive = process.poll() 
if alive is None: 
    print "Still running" 
else: 
    print "Not running\r\n" 
    print "%r" % alive 

test1.py de salida:

Not running
2

test2.py:

time.sleep(30) 
print "done" 

¿Qué está pasando? ¿No debería esto devolver "Todavía en ejecución"?


Debido resultado contradice aquí está el código test1.py completo:

import cStringIO 
import os 
import cgi 
import time 
from subprocess import Popen 

def application(environ, start_response): 
    headers = [] 
    headers.append(('Content-Type', 'text/plain')) 
    write = start_response('200 OK', headers) 

    input = environ['wsgi.input'] 
    output = cStringIO.StringIO() 

    process = Popen(["python","test2.py"]) 
    time.sleep(3) 

    alive = process.poll() 
    if alive is None: 
     print >> output, "Still running" 
    else: 
     print >> output, "Not running\r\n" 
     print >> output, "%r" % alive 

    output.write(input.read(int(environ.get('CONTENT_LENGTH', '0')))) 
    return [output.getvalue()] 

Actualizado test1.py:

process = Popen(["python","C:/wamp/www/python/popen/test2.py"], shell=True) 
    time.sleep(5) 

    alive = process.poll() 
    if alive is None: 
     #print >> output, "%r" % alive 
     print >> output, "Still running" 
    else: 
     print >> output, "Not running" 
     print >> output, "%r" % alive 
     print >> output, "Current working dir : %s" % os.getcwd() 
     print >> output, os.strerror(0) 

salida Actualizado:

Not running
0
Current working dir : C:\wamp\bin\apache\apache2.2.22
No error

+0

Está funcionando bien para mí. Mi salida es 'Todavía en ejecución'. – RanRag

+0

da fuq ... bueno, entonces tengo un nuevo problema. ¿Algunas ideas? Publicaré más código ... Por cierto, pensé que era raro, porque en ninguna parte de mis búsquedas encontré un "2" como resultado de la encuesta(). – Rawr

+0

El mismo resultado con RanRag, obtuve "Todavía en ejecución" también. –

Respuesta

7

Si Popen() no puede encontrar test2.py, se produce el error "No existe el fichero o directorio", con errno 2. Este número de error es devuelto por sondeo(). Ya que parece estar funcionando este script a través wsgi, algo parece estar tragando su stderr y no ver el mensaje de error:

$ cat test1.py 
from subprocess import Popen 
import time 

process = Popen(["python","doesnotexist.py"]) 
time.sleep(3) 

alive = process.poll() 
if alive is None: 
    print "Still running" 
else: 
    print "Not running\r\n" 
    print "%r" % alive 
$ python test1.py 
python: can't open file 'doesnotexist.py': [Errno 2] No such file or directory 
Not running 

2 

Ahora, el problema es probablemente debido a su directorio de trabajo actual de su guión es no configurado en el directorio del script por el servidor front-end, intente imprimir os.getcwd() para ver si es lo que está esperando.

+0

Iba a señalar que 'test2.py' no parece importar el módulo' time', mientras que eso también puede ser un error, esto es la causa más inmediata de tu problema. – chepner

+1

+1, pásame para escribir esto. Si estás tratando de encontrar lo que es un código de salida, puedes probar la función '' os.strerror() '' para ver si da un mensaje significativo: '' >> import os >> os.strerror (2) '' da el mensaje '' 'No hay tal archivo o directorio'''. – Blair

+0

intentado 'http: // localhost: 1234/python/popen/test2.py' y' C: \ wamp \ www \ python \ popen \ test2.py' mismo error ... – Rawr

1

Según this

un estado de salida 2 indica un problema con la cáscara de la ejecución del comando. ¿Has intentado ejecutar test2.py directamente en el shell para verificar que no haya problemas con él? Como señaló Lie, podría ser que el intérprete de comandos no pueda encontrar el archivo que está intentando ejecutar, aunque podría haber otro problema que provoque que se rompa.

Cuestiones relacionadas