1. サブプロセス標準ライブラリの紹介
subprocess を使用すると、新しいプロセスを生成し、それらの入力、出力、エラー パイプを接続し、リターン コードを取得して、一部の古いモジュールと関数を置き換えることができます。
ここでは主に、os.system 関数ではなく、このモジュールの関数を使用してコマンドを実行する方法について説明します。
import subprocess
2. よく使われるクラスと関数をサブプロセスする
2.1subprocess.run函数
このモジュールではまず、さまざまなコマンドを実行するために一般的に使用される run 関数を使用することをお勧めします。
def exec_cmd(command:str,timelimit=4):
"""
执行命令行命令
:param command: 待执行命令的字符串
:param timelimit: 命令执行超时秒数
:return: CompletedProcess实例
"""
return subprocess.run(command,shell=True,stdout=subprocess.PIPE,
stderr=subprocess.PIPE,encoding="utf-8",timeout=timelimit)
command="cat /etc/issue" # 待执行命令用于查看ubuntu版本
completed_process=exec_cmd(command)
print("执行命令获得的ubuntu版本标准输出结果为\n{}".format(completed_process.stdout))
command="cat /proc/cpuinfo | grep name | cut -f2 -d: | uniq -c" # 查看CPU型号
completed_process=exec_cmd(command,timelimit=6) # 将超时秒数设置为6s,否则会超时错误
print("执行命令获得的CPU型号标准输出结果为\n{}".format(completed_process.stdout))
command="free -m" # 查看内存使用情况
completed_process=exec_cmd(command)
print("执行命令获得的内存使用情况标准输出结果为\n{}".format(completed_process.stdout))
command="nvidia-smi" # 查看显存使用情况
completed_process=exec_cmd(command)
print("执行命令获得的显存使用情况标准输出结果为\n{}".format(completed_process.stdout))
2.2subprocess.Popen类
Popen は subprocess のコアです. サブプロセスの作成と管理を処理します. run などの多くの一般的に使用される関数は、subprocess.Popen クラスに基づいて実装されています. 珍しい機能は、このクラスを介してカスタマイズできます。具体的な使用方法については、公式 Web サイトのドキュメントを参照してください。