2016-09-27 8 views
1

に私の古いPythonスクリプトでは、私は、WindowsのCMDコマンドの結果を表示するには、次のコードを使用subprocess.Popenを使用する方法:内蔵したコマンドのWindows

print(os.popen("dir c:\\").read()) 

のpython 2.7文書はos.popen言ったようには廃止され、subprocessが推奨されます。私はドキュメントは、次のとおりです。

result = subprocess.Popen("dir c:\\").stdout 

をそして私は、エラーメッセージました:

WindowsError: [Error 2] The system cannot find the file specified 

はあなたが私にsubprocessモジュールを使用するための正しい方法を教えてもらえますか?

import subprocess 

result = subprocess.Popen("dir c:", shell=True, 
          stdout=subprocess.PIPE, stderr=subprocess.PIPE) 

output,error = result.communicate() 

print (output) 

More info on subprocess module.

+1

Windows上の 'dir'はシェルに組み込まれているため、スタンドアロンの実行ファイルではありません。http://stackoverflow.com/questions/20330385/cannot-find-the-file-specified-when-usingを参照してください。 -subprocess-calldir-shell-true-in – metatoaster

+0

@metatoasterありがとうございました。私が記事を読んだ後、私の理解は、組み込みシェルコマンドは 'サブプロセス 'によって呼び出すことができないということです。このシナリオでの 'os.popen'は '時代遅れ'ではありませんか? –

答えて

1

あなたは以下のようにshell=Trueと通話subprocess.Popen使用する必要がありますのでoutputs[0]stdoutメッセージで、communicate()はタプル(stdoutdata, stderrdata)を返すこと

p = subprocess.Popen(["dir", "c:\\"], stdout=subprocess.PIPE, stderr=subprocess.PIPE) 
outputs = p.communicate() 

は注意をし、 outputs[1]は01ですメッセージ。

+0

'set'や' dir'のような内部シェルコマンドに 'shell = True'を使うのは一般的には悪い考えです。出力は、ロッシーなANSIエンコーディングを使用します。 Windows環境変数とファイルシステム名はUTF-16なので、一般的に内部シェルコマンドは '/ u/c'オプションで実行して、cmd出力UTF-16を作成する必要があります。出力は '' utf-16le ''としてデコードする必要があります。 '/ c/u'の順序が間違っているため、' shell = True'を使って行うことはできません。 – eryksun

0

試してみてください:

関連する問題