Python を使用して OS シェルと対話するにはどうすればよいですか? Python経由でWindows cmdコマンドを実行したい。どうすれば達成できますか?
6 に答える
より新しい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:\ "
osモジュールのシステムメソッドを使用します。
コマンドの文字列形式を入力するだけで、戻り値はWindows環境変数COMSPECです。
例えば:
os.system('python')は、Windowsコマンドプロンプトを開き、Pythonインタープリターを実行します
出力と戻りコードを取得する @ 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)
os パッケージを簡単にインポートして、以下のコマンドを実行します。
import os
os.system("python test.py")