web-dev-qa-db-ja.com

pythonを使用したWindowsシェルコマンドの実行

Pythonを使用してOSシェルと対話するにはどうすればよいですか? pythonを介してwindows cmdコマンドを実行したいです。どうすれば達成できますか?

44
Avi Mehenwal

新しいsubprocess.check_outputおよび同様のコマンドは、os.systemを置き換えることになっています。詳細については、 このページ を参照してください。 Windowsでこれをテストすることはできませんが、次のように動作するはずです。

from subprocess import check_output
check_output("dir C:", Shell=True)

check_outputは、コマンドからの出力の文字列を返します。または、subprocess.callはコマンドを実行し、コマンドのステータスを返します(すべてが正常な場合は通常0)。

また、python 3では、その文字列出力がbytes出力になっていることに注意してください。これを文字列に変更する場合は、次のようなものが必要です。

from subprocess import check_output
check_output("dir C:", Shell=True).decode()

必要に応じて、 伝えることができます プログラム出力のエンコードの種類。デフォルトはutf-8で、通常は正常に機能しますが、他の標準オプションは here です。

60
Mike

Osモジュール システムメソッド を使用します。

コマンドの文字列形式で入力するだけで、戻り値はWindows環境変数COMSPECです

例えば:

os.system( 'python')はWindowsコマンドプロンプトを開き、pythonインタープリターを実行します

os.system('python') example

12
Timidger

出力と戻りコードを取得する@ srini-beergeの回答のリファクタリング

import subprocess
def run_win_cmd(cmd):
    result = []
    process = subprocess.Popen(cmd,
                               Shell=True,
                               stdout=subprocess.PIPE,
                               stderr=subprocess.PIPE)
    for line in process.stdout:
        result.append(line)
    errcode = process.returncode
    for line in result:
        print(line)
    if errcode is not None:
        raise Exception('cmd %s failed, see above for details', cmd)
11
crizCraig

次のコードでsubprocessパッケージを使用できます。

import subprocess
cmdCommand = "python test.py"   #specify your cmd command
process = subprocess.Popen(cmdCommand.split(), stdout=subprocess.PIPE)
output, error = process.communicate()
print output
2
ccy
import subprocess
result = []
win_cmd = 'ipconfig'(curr_user,filename,ip_address)
process = subprocess.Popen(win_cmd,
Shell=True,
stdout=subprocess.PIPE,
stderr=subprocess.PIPE )
for line in process.stdout:
    print line
result.append(line)
errcode = process.returncode
for line in result:
    print line
1
srini-beerge