SORU
17 ŞUBAT 2015, Salı


Neden Python'doğrudan kabuk komutlarını çalıştırmak yerine os modülünün yöntemler kullanılır?

Dizinleri değiştirmek dosya öznitelikleri, etc/dosya oluşturma gibi OS-belirli görevleri yürütmek için Python kütüphane fonksiyonları kullanarak arkasındaki motivasyon ne olduğunu anlamaya çalışıyorum. yerine sadece os.system()) Bu komutları çalıştırmadan veya subprocess.call()?

Örneğin, neden os.system("chmod...") yerine os.chmod kullanmak isteyeyim?

Daha fazla "Python mevcut kütüphane yöntemleri mümkün olduğunca sadece kabuk yürütme yerine" doğrudan komutlar. pythonic olduğunu anlıyorum Ama, orada görüş işlevselliği bir noktadan sonra bu işin arkasında başka bir motivasyon mu?

Tek bir satırı kabuğu basit burada komutları çalıştırmadan bahsediyorum. Görev yürütme üzerinde daha fazla kontrol ihtiyaç olduğunda subprocess modülü kullanarak daha mantıklı anladığım kadarıyla, örneğin.

CEVAP
18 ŞUBAT 2015, ÇARŞAMBA


  1. daha hızlı, os.system subprocess.call Bu basit bir şey için gereksiz olan, yeni işler yaratmak. Aslında os.system subprocess.call shell argüman oluşturmak için en az iki yeni işlemler: ilki kabuk, ve ikincisi olmak komutu kaçıyorsun (değilse bir kabuk dahili gibi test).

  2. Bazı komutlar vardırişe yaramaz ayrı bir süreç. Eğer os.spawn("cd dir/"), örneğin, Python sürecinin alt süreci, ancak geçerli çalışma dizini değiştirmek olacaktır. Bunun için os.chdir kullanmak gerekir.

  3. Özel endişelenmenize gerek yokkarakterler yorumlanırkabuk tarafından. os.chmod(path, mode) os.spawn("chmod 777 " path) dosya adı ; rm -rf ~ gibi bir şey ise korkunç bir şekilde başarısız olur ise dosya adı ne olursa olsun çalışacak. (shell argüman olmadan subprocess.call kullanırsanız, bu geçici bir çözüm olduğunu unutmayın.)

  4. Hakkında endişelenmenize gerek yokbu bir çizgi ile başlayan dosya. os.chmod("--quiet", mode) dosya --quiet adlı izinlerini değiştirmek olacak ama os.spawn("chmod 777 --quiet") --quiet bir değişken olarak yorumlanır olarak, başarısız olur. Bu bile subprocess.call(["chmod", "777", "--quiet"]) için de geçerlidir.

  5. Daha az varçapraz platformve çapraz kabuk endişeleri, Python standart kütüphane olarak sizin için bununla uğraşmak gerekiyor. Sistem chmod komut var mı? Yüklü? Destek beklediğiniz parametreleri destekler mi? os Bu modül mümkün ve belgeleri mümkün değil gibi çapraz platform olmaya çalışın.

  6. Eğer çalıştırdığınız komut varsaçıktıbunu önemsiyorsunuz, ayrıştırma, hangisi daha zor geliyor, seni unutursunuz köşe durumlarda (dosya adları boşluk, sekme ve yeni satır bunları) bile düşünmüyorsun taşınabilirlik.

Bunu Paylaş:
  • Google+
  • E-Posta
Etiketler:

YORUMLAR

SPONSOR VİDEO

Rastgele Yazarlar

  • Blunty

    Blunty

    13 Mart 2006
  • Friday NightFort

    Friday Night

    15 EYLÜL 2011
  • TurkishRoyal

    TurkishRoyal

    16 Ocak 2007