2012-07-30 22 views
6

Python ve Elçi kullanıyorum. Bir dizindeki tüm dosyaları silmem gerek. Bazı dosyalardan ayrı olarak dizin boş. Bir terminal bu olacaktır: AncakElçide rm * (joker karakter) kullanımı: Böyle bir dosya veya dizin yok

r = envoy.run('rm /tmp/my_silly_directory/*') 

:

r.std_err -> "rm: cannot remove `/tmp/my_silly_directory/*': No such file or directory" 

Doğal olarak bu elçi kullanarak alternatifler vardır

rm /tmp/my_silly_directory/* 

Sağduyu elçisi, bu dönüştüğünü dikte Dava, neden işe yaramadığını merak ediyorum.

Herhangi bir ipucu?

cevap

5

UNIX'de, * gibi joker karakterleri yorumlamak kabuğuna kalmış. Bir programı çalıştırırsanız ve * ile bir argümanı doğrudan programa aktarırsanız - ki burada muhtemelen burada ne yapıldığını görebilirsiniz - sonra gördüğünüz gibi bir hata alırsınız. rm sadece * bir dosya adı olduğunu varsayar ve aslında böyle bir dosya oluşturmak mümkündür.

bir çözüm kabuk rm çağırmadan önce * yorumlayacak

r = envoy.run('sh -c "rm /tmp/my_silly_directory/*"') 

gibi bir öğe kabuğu yürütmek ve onu sizin adınıza komut çalıştırmak izin olabilir.

+0

Bu kulağa mükemmel geliyor ve muhtemelen alt işlemlerle çalışabilir. Ancak, elçide, tek çağrı, envoy.run ([["sh", "-c", "rm/tmp/my_silly_directory/*"]]) 'dır. –

+0

, daha basit bir "alt işlem" için çok fazla şey bu arada, alt işlemle çalışmak için bunu alamadı. Orijinal soruyla aynı hata. – Nate

+0

@Nate: ['shutil.rmtree ('/ tmp/my_silly_directory /')'] (http://stackoverflow.com/questions/9106350/how-to-use-wildcards-with-envoy?lq=1#comment15551439_9109127) – jfs

İlgili konular