Python でシェル コマンドを実行して出力を取得する

Salman Mehmood 2023年6月21日
  1. Python スクリプトから CMD コマンドを実行し、os.system() を使用して出力を取得する
  2. Python スクリプトから CMD コマンドを実行し、Subprocess モジュールを使用して出力を取得する
Python でシェル コマンドを実行して出力を取得する

この記事では、os.system() を使用して Python スクリプトから cmd コマンドを実行する方法を学びます。 また、Python の subprocess モジュールを使用して、スクリプトから cmd コマンドをより簡単に実行する方法も学びます。

Python スクリプトから CMD コマンドを実行し、os.system() を使用して出力を取得する

コマンドプロンプトまたはその他の端末で、さまざまな目的で端末コマンドを実行します。 ただし、スクリプト内で特定のコマンドを実行する必要がある場合もあります。

Python スクリプト内で直接実行する方法を見ていきます。 サーバー構成を扱うときに便利です。

まず、ターミナルで機能するコマンドをいくつか紹介します。たとえば、dircd、または md です。

コマンド プロンプトのターミナル コマンド

次に、同じものを Python スクリプトに含める方法を見ていきます。 そのために、os というモジュールをインポートします。

os モジュールは、オペレーティング システムと対話するのに役立ちます。 os モジュールは、ファイルやフォルダーの管理など、オペレーティング システムのタスクを幅広くサポートしています。

コードに飛び込みましょう。 system() は、同様のシェルでコマンドを実行するメソッドであるため、コマンドを指定すると、ターミナルで実行するのと同じように実行されます。

システム関数は、一連のコマンドを実行することもできます。 ターミナルで実行できるすべてのコマンドを実行します。

try ブロックを使用し、このブロック内で system() メソッドを使用します。これは、端末を使用してオペレーティング システムと対話するのに役立ちます。 try ブロックが指定されたコマンドを実行しない場合、except ブロックに進みます。

system() メソッド内でコマンドを渡す必要がありますが、コマンド タイプは cmd です。 そのために、/k を使用し、一重引用符または二重引用符の中にコマンドを入力する必要があります。

import os

try:
    os.system('cmd /k "date"')
except:
    print("Could not execute command")

実行して、これが正確な出力を与えるかどうかを見てみましょう。

The current date is: 24/08/2022
Enter the new date: (dd-mm-yy)

出力はコマンド プロンプトと同じであることがわかります。

実行できるコマンドはたくさんあります。 メモ帳や電卓を開くことも、システム情報などを表示することもできます。

アプリケーションを開いて Python スクリプトからシステム情報を表示

コマンドが返す内容を取得したい場合は、os モジュールの popen() 関数を使用して取得できます。 この関数内で、コマンドを渡し、readlines() メソッドを使用してその内容を取得できます。

多くの方法を使用して、クリーンなデータを取得できます。 あなた次第です。

import os

DATA = os.popen("help").readlines()[5].strip("\n")
print(DATA)

コマンドが返すコンテンツを取得する

これらのコマンドは、クラス、ループ、関数など、どこでも使用できます。 これは、関数でラップしなくても適切に機能します。

import os


def CMD_Com():
    DATA = os.popen("help").readlines()[5].strip("\n")
    print(DATA)


CMD_Com()

出力:

CACLS          Displays or modifies access control lists (ACLs) of files.

Python スクリプトから CMD コマンドを実行し、Subprocess モジュールを使用して出力を取得する

サブプロセスとの対話は、必須のスキルです。 Python スクリプト内で端末コマンドを実行するために os モジュールを使用することはお勧めしません。

os.system() を使用して端末コマンドを実行することは、Python でコマンドを実行する非常に単純な方法です。

os.system() の機能は限られています。 適切な方法は、subprocessと呼ばれるモジュールを使用することです。これにより、端末コマンドの実行が難しくなりません。 subprocess モジュールを使用すると、現在作業しているすべてのオペレーティング システム コマンドを実行できます。

これは、メモ帳を開く、現在の作業ディレクトリを確認する、または subprocess モジュールを使用して実行できるその他の操作など、オペレーティング システムで既存のすべてのコマンドを実行する方法です。

import subprocess

# subprocess.Popen('notepad')
# subprocess.Popen('systeminfo')
subprocess.Popen("dir", shell=True)

出力:

 Directory of C:\Users\Dell\Downloads\demo

24/08/2022  07:01 pm    <DIR>          .
24/08/2022  07:01 pm    <DIR>          ..
25/08/2022  01:47 am               460 demo.py
               1 File(s)            460 bytes
               2 Dir(s)  32,532,512,768 bytes free

subprocess モジュールの詳細については、こちら を参照してください。

著者: Salman Mehmood
Salman Mehmood avatar Salman Mehmood avatar

Hello! I am Salman Bin Mehmood(Baum), a software developer and I help organizations, address complex problems. My expertise lies within back-end, data science and machine learning. I am a lifelong learner, currently working on metaverse, and enrolled in a course building an AI application with python. I love solving problems and developing bug-free software for people. I write content related to python and hot Technologies.

LinkedIn