2012-08-10 42 views
6

test1.py:Subprocess.poll() trả về giá trị sai

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 Output:

Not running
2

test2.py:

time.sleep(30) 
print "done" 

Điều gì đang xảy ra? Không nên trả lại "Vẫn chạy"?


Bởi vì kết quả mâu thuẫn ở đây là mã test1.py đầy đủ:

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()] 

Cập nhật 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) 

Output Cập nhật:

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

+0

Làm việc tốt cho tôi. Đầu ra của tôi là 'Vẫn đang chạy'. – RanRag

+0

da fuq ... sau đó tôi có một vấn đề mới. Bất kỳ ý tưởng? Tôi sẽ đăng thêm mã ... BTW Tôi nghĩ rằng nó là lạ, bởi vì không có nơi trong tìm kiếm của tôi đã làm tôi tìm thấy một "2" như là một kết quả cho cuộc thăm dò(). – Rawr

+0

Kết quả tương tự với RanRag, tôi cũng nhận được "Vẫn đang chạy". –

Trả lời

7

Nếu Popen() không thể tìm thấy test2.py, nó tạo ra lỗi "Không có tập tin hoặc thư mục", với errno 2. Số Lỗi này được trả về bởi cuộc thăm dò(). Vì bạn dường như đang chạy script này qua wsgi, một cái gì đó dường như bị nốc stderr của bạn và bạn không thấy thông báo lỗi:

$ 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 

Bây giờ, vấn đề này có lẽ là bởi vì thư mục làm việc hiện tại của bạn kịch bản của bạn là không được đặt vào thư mục của tập lệnh bởi máy chủ kết thúc trước, hãy thử in os.getcwd() để xem đó có phải là những gì bạn đang mong đợi hay không.

+0

Tôi sẽ chỉ ra rằng 'test2.py' dường như không nhập khẩu' time' module, trong khi đó có thể là một lỗi là tốt, đây là – chepner

+1

+1, đánh bại tôi để đánh máy này.Nếu bạn đang cố gắng tìm ra mã thoát là gì, bạn có thể thử hàm '' os.strerror() '' để xem nó đưa ra một thông điệp có ý nghĩa: '' >> import os >> os.strerror (2) '' cung cấp thông điệp '' 'Không có tập tin hoặc thư mục''' như vậy. – Blair

+0

đã thử 'http: // localhost: 1234/python/popen/test2.py' và' C: \ wamp \ www \ python \ popen \ test2.py' lỗi tương tự ... – Rawr

1

Theo this

Một trạng thái thoát của 2 chỉ ra một vấn đề với vỏ thực hiện lệnh. Bạn đã thử chạy trực tiếp test2.py trong trình vỏ để xác minh không có vấn đề với nó? Như Lie đã chỉ ra rằng nó có thể là trình bao không thể tìm thấy tệp bạn đang cố gắng thực thi, mặc dù có thể có một vấn đề khác khiến nó bị hỏng.

Các vấn đề liên quan