呼び出しのPythonシェルスクリプト一般的に使用される機能を持っているos.system、os.popen()とsubprocess.Popen()
- os.system方法
構文:os.system(CMD)
行う主にos.system()の実行中:フォーク()をサブプロセスの、子プロセスコールのexec()コマンドを実行します。
例1:>>> import os >>> os.system('dir D:\Python')
、リターン0を成功します。
例2:import os res = os.system('ping www.baidu.com -n 3') if res == 0: print('成功') else: print('失败了')
結果:
注:
1).os.system()命令実行CMD、0戻り結果は、成功を示す失敗を返します。
2).os.system()は、コンテンツCMDの出力を得ることができません。
3).os.system()システムは、外部コマンドを呼び出し、コマンドは、結果コードを返し、コマンド出力を得ることができません。 - os.popen方法
構文:のpopen(CMD、モード= ' R'、緩衝= -1)
パラメータ:cmd:要执行的命令。 mode:打开文件的模式,默认为'r',用法与open()相同。 buffering:(可选参数),0表无缓冲;1表行缓冲;-1表默认缓冲值;
os.popen()メソッドは、結果がオブジェクト・ファイルに接続された導管であり、パイプラインを開きます。実行が正常にファイルオブジェクトの読み込みが結果を返す返され、ステータスコードを返しません。これは、エラーメッセージの実行を返し、失敗しました。そして、リターン結果は、処理プログラムを容易にするため、変数に与えることができます。
例1:
ファイルの内容:D:\ Pythonの\ test.pyprint('popen()测试')
D:\ Pythonの\ test2.pyファイルの内容
res = os.popen(r'D:\Python\test.py', mode='r') res1 = res.read() #返回结果赋于一变量,便于程序的处理 print(res1) print(type(res1)) #返回str res.close()
パイソンD:\ Pythonの\ test2.py結果:
- サブプロセスモジュール
os.system、os.popen実現される機能は、サブプロセスモジュールに実装することができるお勧めします。そして、サブプロセスモジュールはまた、新しい子プロセスを作成するために、外部のシステムコマンドを呼び出すことができます。サブプロセスの実行時間は、メインシステムコマンドは、プロセスを実行することはありませんが、プロセスは、(メインフォークを開きます)子プロセスを実行するために、メインプロセスの動作には影響しません。
サブプロセスモジュールメイン・コール()、popenの()関数。
3.1 subprocess.Popen()関数の
構文:subprocess.Popen(args, bufsize, executable, stdin, stdout, stderr, preexec_fn, close_fds, shell, cwd, env, universal_newlines, startupinfo, creationflags)
引数:外部システムコマンドを呼び出すため。
bufsizeは:デフォルト値は0であり、バッファなし; 1は、ラインバッファを表し、他の正の数は、使用されるバッファのサイズを示し、-1負システムのデフォルトのバッファサイズを示します。
標準入力、標準出力、標準エラー出力:標準入力、標準出力および標準誤差を表します。値はPIPE、ファイルディスクリプタなどなしです。デフォルト値は、親プロセスから継承なし、表現ではありません。
シェル:Linuxのパラメータ値は、Linux上で対応するプログラムを呼び出すことによって実行虚偽、os.execvpです。確かに、Linuxシステム上のダイレクトコールは、プログラムを実行するシェル。trueに設定Windowsのシェルパラメータ、プログラムはシェルを介して実行されます。
CWD:子プロセスのカレントディレクトリを設定します。
ENV:ENV環境変数は、子プロセスを指定し、辞書の種類です。デフォルト値は、環境変数は親プロセスから継承された子プロセスを表し、Noneです。
subprocess.PIPE:popenのオブジェクト作成する場合、subprocess.PIPEはSTDIN、STDOUTまたはstderrパラメータを初期化することができるが、標準のサブプロセスの通信フローを表します。結果は、パイプライン(プロセス間で共有するための共有メモリ空間)に投入します。
例1:cmd = 'ipconfig | findstr "192.168.1.128"' p = subprocess.Popen(cmd, shell=True, stdout=subprocess.PIPE) #将正确的执行结果丢到管道中。 res = p.stdout.read().decode('gbk') #主进程去管道里获取正确stdout的结果,并将获取的结果的bytes类型转换。 print(res) print(type(res))
subprocess.Popen()メソッドos.popenは、()と比較され、os.popen()の出力は、直接可読得、その結果subprocess.Popenを(出力)バイナリ形式で取得されます改行されています。
3.2 subprocess.call()関数の
外部システムコマンドの呼び出し、および戻り結果コードが実行されます。この関数はos.system(CMD)に似ています。0は、正常な実行を示し、障害のために1を返します。
例2:import subprocess res = subprocess.call('ping www.baidu.com', shell=True) print('>>> ping www.baidu.com') print('测试res:', res)
結果: