2011-07-24 11 views
7

Aşağıdaki piton kodu vardır:Python çalıştırmak sistem komutu ve ardından çıkış ... çıkmayacaktır

os.system("C:/Python27/python.exe C:/GUI/TestGUI.py") 
sys.exit(0) 

Bu komut cezası çalışır ve bir pencere açılır. Ancak, ilk komut dosyasından çıkmıyor. Sadece orada kalır ve sonunda süreci öldürmek zorunda kalırım. Hata üretilmiyor. Neler oluyor?

+0

os._exit (0) – Eddie

+3

'un çalıştığı sorun,' os.system (command) 'komutunun komut bitene kadar engellenmesi, OP'nin istediği şeyin bitmesini beklemeden komutu çalıştırmaktır. –

+0

@Dan Tam Olarak! Sadece bunun farkına vardım. Python betiği çalıştığı için, "shell" içinde hala canlıdır ve os.system'in kabuğu çıkana kadar beklemesi gerekir. Bunu nasıl yapardım? –

cevap

10

yerine os.system kullanımı çıkar:

import subprocess 
import sys 

subprocess.Popen(["mupdf", "/home/dan/Desktop/Sieve-JFP.pdf"]) 
sys.exit(0) 

os.system(command) gibi o not:

p = subprocess.Popen(command) 
p.wait() 
+0

Ve en üstteki komut dosyasını bir terminal penceresinden çalıştırıyorsanız, bu pencereyi komut dosyanızdan ve 'cmd.exe'nin kendisinden çıktıktan sonra bile açık kalması için yaşayabilirsiniz! .. Bu pencerenin içinden bazı arkaplan işlemleri başlattı. Bu işlemlerden sonra pencere kapanır. – spacediver

0
import sys ,subprocess 

subprocess.Popen(["C:/Python27/python.exe", "C:/GUI/TestGUI.py"]) 
sys.exit(0) 

Aradığın alt işlem modülünden çıkar. Bu daha sonra bir komut çalıştırır ve bunun için beklemez ve subprocess.Popen

0

Ben kullanmanızı öneririz Sys.exit bir programdan çıkmaz, ancak istisna seviyesini artırır veya çıkarsa, os._exit yerine sys.exit Bir iş parçacığı. os._exit(-1) tüm programdan çıkar (

0

KeyboardInterrupts ve sinyaller yalnızca işlem tarafından görülür (yani ana iş parçacığı). Yuvalanmış komutunuz bir çeşit dosya okuma veya yazma bloğu nedeniyle askıda kalıyorsa, herhangi bir klavye komutunu kullanarak programı bırakamazsınız.

Why does a read-only open of a named pipe block?

disk bloğunun kaynağını ortadan kaldıramaz, o zaman tek yolu onu öldürmek zorlayabilir böylece iplik süreci tamamlamayı etmektir. Ancak bunu yaparsanız, diskte yarı yazılı ve bozuk dosyalar için fırsat bırakırsınız.

İlgili konular