8

避けられない理由から、Python 2.6 を使用しています。Idle コマンド ラインで次の小さなコードを実行したところ、理解できないエラーが発生しました。どうすればこれを回避できますか?

>>> import subprocess
>>> x = subprocess.call(["dir"])

Traceback (most recent call last):
  File "<pyshell#1>", line 1, in <module>
    x = subprocess.call(["dir"])
  File "C:\Python26\lib\subprocess.py", line 444, in call
    return Popen(*popenargs, **kwargs).wait()
  File "C:\Python26\lib\subprocess.py", line 595, in __init__
    errread, errwrite)
  File "C:\Python26\lib\subprocess.py", line 821, in _execute_child
    startupinfo)
WindowsError: [Error 2] The system cannot find the file specified
>>> 
4

1 に答える 1

19

設定してみてくださいshell=True

subprocess.call(["dir"], shell=True)

dir呼び出すことができる実行可能ファイルがないことを意味するシェルプログラムです。そのdirため、シェルからのみ呼び出すことができるため、shell=True.

subprocess.call出力を提供せずにコマンドのみを実行することに注意してください。終了ステータスのみを返します (通常、成功した場合は 0)。

出力を取得したい場合は、次を使用できますsubprocess.check_output

>>> subprocess.check_output(['dir'], shell=True)
' Datentr\x84ger in Laufwerk C: ist … and more German output'

Unix で動作する理由を説明するには:dir実際には実行可能ファイルがあり、通常は に配置され/bin/dir、PATH からアクセスできます。Windows では、PowerShellのdirコマンド インタープリターcmd.exeまたはコマンドレットの機能です (エイリアスはです)。Get-ChildItemdir

于 2013-10-08T20:44:03.407 に答える