次のエラーが表示されます。
WindowsError: [Error 2] The system cannot find the file specified
私のコードは:
subprocess.call(["<<executable file found in PATH>>"])
Windows 7、64ビット。 Python 3.x最新、安定。
何か案は?
おかげで、
コマンドがシェル組み込みの場合、呼び出しに「Shell = True」を追加します。
例えば。 dir
の場合、次のように入力します。
import subprocess
subprocess.call('dir', Shell=True)
ドキュメントから引用するには:
WindowsでShell = Trueを指定する必要があるのは、実行するコマンドがシェルに組み込まれているときだけです(例:dirまたはcopy)。バッチファイルまたはコンソールベースの実行可能ファイルを実行するためにShell = Trueは必要ありません。
Windowsでは、Shell=True
を渡さない限り、subprocess
モジュールはPATH
を検索しません。ただし、プログラムの外部からの引数を渡す場合、Shell=True
はセキュリティリスクになる可能性があります。 subprocess
にもかかわらず正しい実行可能ファイルを見つけることができるようにするには、 shutil.which
を使用できます。 PATH
の実行可能ファイルの名前がfrob
であるとします:
subprocess.call([shutil.which('frob'), arg1, arg2])
(これはPython 3.3以降で動作します。)
Windowsでは、cmd.exeを介して呼び出す必要があります。 Apalalaが述べたように、Windowsコマンドは、別個の実行可能ファイルとしてではなく、cmd.exeに実装されます。
例えば.
subprocess.call(['cmd', '/c', 'dir'])
/ cはcmdにfollowコマンドを実行するよう指示します
これは、シェル注入を許可するShell = Trueを使用するよりも安全です。
Powershellを使用している場合は、その中にsubprocess.call(['powershell','-command','dir'])
が含まれます。 PowershellはPOSIXコマンドの大部分をサポートしています
ドキュメントから引用するには:
「Python 3.5より前、これらの3つの関数はサブプロセスに対する高レベルAPIで構成されていました。多くの場合run()を使用できますが、既存のコードの多くはこれらの関数を呼び出します。」
SO:subprocess.callの代わりにPython 3.5以降でsubprocess.runを使用してください