0

Ben dosya this_script.py bu gibi bazı kod varsa:Kabuk süreçleri denen Python betiğini öldürmek de kabuk işlemlerini mi öldürür?

import subprocess 
subprocess.Popen(["python", "another_script.py"]) 

ve ben

python this_script.py 

arayıp çalışırken süreci öldürmek, bu alt işlemi öldürecek?

Düzenleme: Bunu test ettim ve eğer this_script öldürülürse, alt işlem çalışmaya devam eder. Ana Python işleminin gerçekleştirdiği arka plan sürecinin öldüğünden emin olmanın bir yolu var mı?

+1

Neden bir deneme yapmıyorsunuz? –

+0

Yanıt, farklı platformlarda farklı olabilir, bu nedenle @TymoteuszPaul önerdiği gibi, platformunuzda nasıl davrandığından emin olmak için kendiniz denemelisiniz. –

+0

Test ettim, ana işlem öldüğünde çalışmaya devam ediyor (bu, CentOS'ta). Ana işlem bittiğinde alt işlemin öldüğünden emin olmanın bir yolu var mı? – Andrew

cevap

2

Evet, KeyboardInterrupt ve SystemExit öğelerini yakalayabilir ve alt işlemin kill olduğundan emin olabilirsiniz.

from subprocess import Popen 

try: 
    p = Popen(args) 
    p.wait() # wait for the process to finish 
except KeyboardInterrupt, SystemExit: 
    p.kill() 
    raise 
+0

Bu koddaki sorun, 'Popen()' ın zaman uyumsuz olarak çalışmasıdır. Diğer bir deyişle, ana Python süreci hemen hemen çıkacak ve şimdi arka planda çalışan alt işlemlere sahip olacaksınız. Düzeltmek için 'p.wait()' ekleyebilirsiniz. '' try' bloğunda veya '' dışında '' değiştirerek '' nihayet '... OP'in hangisinin istediğini bilmeden ... – Carpetsmoker

+0

Ah, evet. Haklısın. Ekleyeceğim. – MaxNoe