63

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

4

6 に答える 6

93

より新しいsubprocess.check_output類似のコマンドが置き換えられるはずos.systemです。詳しくはこちらのページをご覧ください。これを Windows でテストすることはできませんが (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です。

また、@bluescorpion のコメントで、Windows 10 には末尾のバックスラッシュが必要であると書かれていることにも注意してくださいcheck_output("dir C:\\", shell=True)\は Python の特殊文字であるため、二重のバックスラッシュが必要なので、エスケープする必要があります。(また、 が文字列の最後の文字であるr場合は、文字列の前に を付けても役に立たないことに注意してください。これは構文エラーですが、そうではありません。)\r"dir C:\"r"dir C:\ "

于 2013-02-15T15:41:09.587 に答える
19

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

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

例えば:

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

os.system('python')の例

于 2013-02-15T15:17:58.587 に答える
19

出力と戻りコードを取得する @ 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)
于 2016-12-09T20:00:58.727 に答える
8

os パッケージを簡単にインポートして、以下のコマンドを実行します。

import os
os.system("python test.py")
于 2020-01-07T10:43:10.433 に答える