2012-07-30 3 views
6

मैं पाइथन और दूत का उपयोग कर रहा हूं। मुझे निर्देशिका में सभी फाइलों को हटाने की जरूरत है। कुछ फाइलों के अलावा, निर्देशिका खाली है। एक टर्मिनल में इस होगा:दूत में आरएम * (वाइल्डकार्ड) का उपयोग करना: ऐसी कोई फ़ाइल या निर्देशिका

rm /tmp/my_silly_directory/* 

सामान्य बुद्धि तय है कि दूत में, इस में तब्दील हो:

r = envoy.run('rm /tmp/my_silly_directory/*') 
हालांकि

:

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

स्वाभाविक रूप से इस में दूत का उपयोग करने के विकल्प हैं मामला, मैं बस सोच रहा हूं कि यह क्यों काम नहीं करता है।

कोई सुराग?

उत्तर

5

यूनिक्स पर, * जैसे वाइल्डकार्ड की व्याख्या करने के लिए यह खोल पर निर्भर है। यदि आप किसी प्रोग्राम को निष्पादित करते हैं और * के साथ सीधे तर्क के लिए तर्क देते हैं - जो संभवतः यहां किया जा रहा है - तो आपको एक त्रुटि मिल जाएगी जैसा आप देख रहे हैं। rm बस मानता है कि * एक फ़ाइल नाम है, और वास्तव में, यह वास्तव में ऐसी फ़ाइल बनाना संभव है।

एक समाधान की तरह

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

कुछ खोल निष्पादित और यह अपनी ओर से अपने आदेश पर अमल करने देने के लिए, खोल rm लागू करने से पहले * व्याख्या करेगा हो सकता है।

+0

यह बिल्कुल सही लगता है, और शायद उपप्रोसेसर के साथ काम करेगा। हालांकि, दूत में, एकमात्र कॉल जो काम करता है वह है 'envoy.run ([[sh "," -c "," rm/tmp/my_silly_directory/* "]])' किसी कारण से। एक सरल 'subprocess' के लिए बहुत कुछ;) –

+0

इसे सबप्रोसेस के साथ काम करने के लिए नहीं मिल सका। मूल प्रश्न के समान त्रुटि। – 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

संबंधित मुद्दे