2009-09-04 19 views

Trả lời

8

Hãy xem mô-đun subprocess. Bạn cũng có thể sử dụng các nguyên thủy cấp thấp như fork() qua mô-đun os.

3

Một chức năng đơn giản mà sử dụng mô-đun subprocess:

def CMD(cmd) : 
    p = subprocess.Popen(cmd, shell=True, 
         stdin=subprocess.PIPE, 
         stdout=subprocess.PIPE, 
         stderr=subprocess.PIPE, 
         close_fds=False) 
    return (p.stdin, p.stdout, p.stderr) 
0

Nếu bạn cần phải tương tác với các tiểu quá trình ở tất cả, tôi khuyên bạn nên mô-đun pexpect (link text). Bạn có thể gửi đầu vào cho quá trình, nhận được (hoặc "mong đợi") đầu ra trong trở lại, và bạn có thể đóng quá trình (với lực = True để gửi SIGKILL).

13

Đây là một tập lệnh python nhỏ bắt đầu quá trình, kiểm tra xem nó đang chạy, chờ một lúc, giết nó, chờ nó chấm dứt, sau đó kiểm tra lại. Nó sử dụng lệnh 'kill'. Phiên bản 2.6 của quy trình con trăn có chức năng diệt. Điều này được viết trên 2.5.

import subprocess 
import time 

proc = subprocess.Popen(["sleep", "60"], shell=False) 
print 'poll =', proc.poll(), '("None" means process not terminated yet)' 
time.sleep(3) 
subprocess.call(["kill", "-9", "%d" % proc.pid]) 
proc.wait() 
print 'poll =', proc.poll() 

Sản lượng theo thời gian cho biết rằng nó đã bị chấm dứt sau khoảng 3 giây và không phải 60 như lời gọi cho giấc ngủ đề xuất.

$ time python prockill.py 
poll = None ("None" means process not terminated yet) 
poll = -9 

real 0m3.082s 
user 0m0.055s 
sys 0m0.029s 
+1

bạn có thể sử dụng 'os.kill (..)' để hủy quá trình –

+1

hoặc thậm chí 'proc.terminate()' hoặc 'proc.kill()' kể từ python 2.6 –

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