6

Python と Envoy を使用しています。ディレクトリ内のすべてのファイルを削除する必要があります。一部のファイルを除いて、ディレクトリは空です。端末では、これは次のようになります。

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"

当然、この場合 envoy を使用する代替手段がありますが、なぜそれが機能しないのか疑問に思っています。

手がかりはありますか?

4

1 に答える 1

5

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

1つの解決策は、シェルを実行して、あなたに代わってコマンドを実行させることです。

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

シェルは*を呼び出す前に を解釈しrmます。

于 2012-07-30T13:15:29.160 に答える