Yanıtlar:
Eğer check out Python docs alt süreç bölümünü , değiştirmek bir örnek buluştuğunu göreceksiniz os.system()
ile subprocess.Popen()
:
sts = os.system("mycmd" + " myarg")
... aynı şeyi yapar ...
sts = Popen("mycmd" + " myarg", shell=True).wait()
"Geliştirilmiş" kod daha karmaşık görünüyor, ancak daha iyi çünkü bir kez öğrendiğinizde subprocess.Popen()
başka hiçbir şeye ihtiyacınız yok. subprocess.Popen()
diğer os.system()
üç Python modülüne dağılmış olan diğer birkaç aracı ( bunlardan sadece biridir) değiştirir.
Yardımı olacaksa, subprocess.Popen()
çok esnek olarak düşünün os.system()
.
shell=True
. Bu seçeneğe sahip olmak, faydalarından biridir subprocess.Popen()
ve yardımcı işlevleridir.
os.system
ve subprocess.call/popen/run
bitirmek için komut için blok / bekleme yapar: stackoverflow.com/a/14059648/4752883
os.system
Unix system
komutuna eşdeğerdir subprocess
, Popen
komutlar tarafından sağlanan birçok özelliği daha kolay ve kontrol edilebilir bir arayüzle sağlamak için oluşturulmuş yardımcı bir modüldür . Bunlar Unix Popen komutuna benzer şekilde tasarlandı .
system()
komutta belirtilen bir komutu çağırarak yürütür/bin/sh -c command
ve komut tamamlandıktan sonra geri döner
Buna karşılık:
popen()
Fonksiyonu, bir boru oluşturmak bölmek ve kabuk çağırarak bir işlem açar.
Hangisini kullanacağınızı düşünüyorsanız, o zaman subprocess
kesinlikle kullanın, çünkü yürütme için tüm olanaklara ve ayrıca süreç üzerinde ek kontrole sahip olursunuz.
Alt süreç popen2'ye dayalıdır ve bu nedenle birçok avantajı vardır - burada PEP'te tam bir liste var , ancak bazıları:
Windows üzerinde python (cpython) çalıştırırken , <built-in function system>
os.system perdeler _wsystem altında çalıştırılırken , windows olmayan bir işletim sistemi kullanıyorsanız, sistemi kullanır .
Bunun tersine Popen , windows üzerinde CreateProcess ve posix tabanlı işletim sistemlerinde _posixsubprocess.fork_exec kullanmalıdır.
Bununla birlikte, önemli bir tavsiye os.system belgelerinden geliyor ve şöyle diyor:
Alt süreç modülü, yeni süreçler üretmek ve sonuçlarını almak için daha güçlü olanaklar sağlar; bu modülün kullanılması, bu işlevi kullanmaya tercih edilir. Yararlı bazı tarifler için alt işlem belgelerinde Eski İşlevleri Alt İşlem Modülüyle Değiştirme bölümüne bakın.
sts = p.wait()
Son satır yerine de kullanabilirsiniz .