2

ドキュメントsubprocess.callでは、との使用を推奨しshell=Trueていませんが、私が次のような単純なことをしようとすると

call(['convert'])

エラーが発生します:

ファイルシステムを指定する必要があります

cmd.exeを介して同じコマンドを実行すると、次のようになります。

C:\Users\Mark>convert
Version: ImageMagick 6.7.3-6 2011-11-10 Q16 http://www.imagemagick.org
...

など、つまり、実際に実行されます。

それで、何をしているのcallですか?なぜファイルを探しているのですか?

.exeへのフルパスが必要ですか?もしそうなら、私はすべての.exeがどこにあるのかわからないので、そうしないことを望みます。


プログラムへのフルファイルパス()で試してみたところ、call(['C:/imagemagick/convert.exe'])うまくいきました。しかし、問題はまだ残っています...フルパスなしでどのようにそれを行うのですか?作業ディレクトリから実行するだけですか?

4

2 に答える 2

4

dirスタンドアロンプ​​ログラムではなく、cmd.comの組み込み関数だと思います。shell = Trueまたはと同様の機能を提供するプログラムdir(unixtoolsのls.exeプログラムなど)が必要になります。

編集のための更新:ここで説明されている既知の問題/バグとまったく同じように聞こえます:http://bugs.python.org/issue8557およびここでpythonサブプロセスPopen環境PATH?

shell=Falsewin32ではかなり奇妙な場合のsubprocess.callの動作のようです。少なくとも使用する必要はconvert.exeなくconvert自分で検索PATHする必要があるようです。

于 2012-05-31T02:24:43.703 に答える
2

ここでの問題はdir.exe、シェルで試すことでよりよく理解できます。

C:\Users\lvc>dir.exe
 Volume in drive C has no label.
 Volume Serial Number is 4B8C-511A

 Directory of C:\Users\lvc

File Not Found

これは、それdirが実行可能ファイルではないことを意味します。%PATH%むしろ、プログラムを検索せずにシェルが実行方法を知っているコマンドです。つまり、定義上、。で動作することはありませんshell=False

于 2012-05-31T02:25:10.593 に答える