2012-07-30 13 views
6

私はPythonとEnvoyを使用しています。私はディレクトリ内のすべてのファイルを削除する必要があります。いくつかのファイルとは別に、ディレクトリは空です。ターミナルでは、これは次のようになります。しかしenvoyでrm *(ワイルドカード)を使用:そのようなファイルやディレクトリはありません

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

rm /tmp/my_silly_directory/* 

常識は特使に、これはに変換することを指示

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

は、当然のことながら、この中に特使を使用する選択肢があります私は、なぜそれがうまくいかないのか不思議です。

手がかりはありますか?

答えて

5

UNIXでは、シェルには、ワイルドカードを解釈するのは*です。プログラムを実行して*という引数をプログラムに直接渡すと(おそらくここで何が行われているのか)、あなたが見ているようにエラーが発生します。 rmは、ファイル名が*であると仮定していますが、実際にはそのようなファイルを作成することは実際可能です。

一つの解決策は、シェルを実行し、それがあなたに代わってあなたのコマンドを実行してみましょう、

r = envoy.run('sh -c "rm /tmp/my_silly_directory/*"') 
のようなもの

シェルはrmを呼び出す前に*を解釈するためにである可能性があります。

+0

これは完全に正しいと思われ、おそらくサブプロセスで動作します。しかし、特使の中では何らかの理由で 'envoy.run([" "sh"、 "-c"、 "rm/tmp/my_silly_directory/*"]))という唯一の呼び出しがあります。これは単純な 'サブプロセス 'のためである); –

+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

関連する問題