Python でシェル コマンドを実行して出力を取得する
-
Python スクリプトから CMD コマンドを実行し、
os.system()
を使用して出力を取得する -
Python スクリプトから CMD コマンドを実行し、
Subprocess
モジュールを使用して出力を取得する
この記事では、os.system()
を使用して Python スクリプトから cmd コマンドを実行する方法を学びます。 また、Python の subprocess
モジュールを使用して、スクリプトから cmd コマンドをより簡単に実行する方法も学びます。
Python スクリプトから CMD コマンドを実行し、os.system()
を使用して出力を取得する
コマンドプロンプトまたはその他の端末で、さまざまな目的で端末コマンドを実行します。 ただし、スクリプト内で特定のコマンドを実行する必要がある場合もあります。
Python スクリプト内で直接実行する方法を見ていきます。 サーバー構成を扱うときに便利です。
まず、ターミナルで機能するコマンドをいくつか紹介します。たとえば、dir
、cd
、または 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)
出力はコマンド プロンプトと同じであることがわかります。
実行できるコマンドはたくさんあります。 メモ帳や電卓を開くことも、システム情報などを表示することもできます。
コマンドが返す内容を取得したい場合は、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
モジュールの詳細については、こちら を参照してください。
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