osモジュールでcmdを呼び出すには、os.popen()とos.system()の2つのメソッドがあります。
os.system(cmd)は、コマンドコマンドの実行時に端末を開く必要があり、コマンドコマンドの実行結果を保存できません。
os.popen(cmd、mode)は、コマンドプロセスでパイプを開きます。戻り値はファイルオブジェクトであり、読み取りまたは書き込みが可能です(モードによって決定され、デフォルトは「r」です)。モードが「r」の場合、この関数の戻り値を使用してread()を呼び出し、コマンドコマンドの実行結果を取得できます。
os.system()
定義:
def system(*args,**kwargs): # real signature unknown
""" Execute the command in a subshell. """
pass
簡単に言えば、シェルでコマンドコマンドを実行します
例:
( venv) C:\Users\TynamYang python
Python 3.7.0(v3.7.0:1bf9cc5093, Jun 272018,04:06:47)[MSC v.191432bit(Intel)] on win32
Type "help","copyright","credits" or "license"for more information.import os
cmd ='echo "I am tynam"'
os.system(cmd)"I am tynam"
os.popen()
定義:
# Supply os.popen()
def popen(cmd, mode="r", buffering=-1):if not isinstance(cmd, str):
raise TypeError("invalid cmd type (%s, expected string)"%type(cmd))if mode not in("r","w"):
raise ValueError("invalid mode %r"% mode)if buffering ==0 or buffering is None:
raise ValueError("popen() does not support unbuffered streams")import subprocess, io
if mode =="r":
proc = subprocess.Popen(cmd,
shell=True,
stdout=subprocess.PIPE,
bufsize=buffering)return_wrap_close(io.TextIOWrapper(proc.stdout), proc)else:
proc = subprocess.Popen(cmd,
shell=True,
stdin=subprocess.PIPE,
bufsize=buffering)return_wrap_close(io.TextIOWrapper(proc.stdin), proc)
コマンドコマンドもシェルで実行されますが、返される結果はファイルオブジェクトであり、読み取りと書き込みが可能です。
3つのパラメーターの意味:
command —実行されるシェルコマンド
mode —モード許可、読み取り( 'r')または書き込み( 'w')、デフォルトは読み取り( 'r')
bufsize —バッファ値が0に設定されている場合、バッファリングは実行されません。バッファ値が1の場合、ファイルにアクセスするときに行バッファリングが実行されます。バッファ値が1より大きい整数に設定されている場合、バッファ操作は設定されたバッファサイズで実行されます。負の場合、バッファサイズはシステムのデフォルト値(デフォルトの動作)です。
例:
import os
cmd ='echo "I am tynam"'
f = os.popen(cmd,'r')
f.read()'"I am tynam"\n'
以上が本稿の内容ですので、皆様のご勉強に役立てていただければ幸いです。
Recommended Posts