Komut satırı araçlarını ayrı işlemler olarak çalıştırmak isterseniz, bunları senkronize olmayan bir şekilde başlatmak için os.system
(veya daha iyisi: The subprocess
modülünü) kullanın. Unix Açık/Linux/MacOS:
Windows'ta
subprocess.call("command -flags arguments &", shell=True)
: Bir komut bittiğinde bilerek gelince
subprocess.call("start command -flags arguments", shell=True)
: unix altında wait
vb kurmak alabilir, ama eğer Komut dosyası komut dosyaları yazarken, sadece bir dosyaya bir mesaj yazmaları ve dosyayı çağıran python komut dosyasından izlemelerini istiyorum.
@James Youngman ikinci sorunuza bir çözüm önerdi: Senkronizasyon. Süreçlerinizi python'dan kontrol etmek isterseniz, onları Popen ile eşzamansız olarak başlatabilirsiniz.
p1 = subprocess.Popen("command1 -flags arguments")
p2 = subprocess.Popen("command2 -flags arguments")
Eğer POPEN kullanmak ve süreçleri Stdout'a çok veri yazarsanız, programınız kilitlenmeye olacaktır sakının. Tüm çıktıyı bir günlük dosyasına yönlendirdiğinizden emin olun.
p1
ve p2
, işlemleriniz üzerinde sekmeleri tutmak için kullanabileceğiniz nesnelerdir. p1.poll()
engellenmez, ancak işlem hala devam ediyorsa, Hiçbiri dönmez. Tamamlandığında çıkış durumunu döndürür, böylece sıfır olup olmadığını kontrol edebilirsiniz.
for proc in [p1, p2]:
time.sleep(60)
status = proc.poll()
if status == None:
continue
elif status == 0:
# harvest the answers
else:
print "command1 failed with status", status
yukarıda sadece bir modeldir: yazılı olarak, çıkış asla ve "hasat" tamamlandı süreçlerin sonuçları tutacak. Ama sana güveniyorum, fikrini al.
Python iyi destek [ 'threading'] (http://docs.python.org/library/threading.html) vardır ve [' multiprocessing'] (http://docs.python.org/ kütüphane/multiprocessing.html). Bunlarla ilgili özel problem nedir? –