Python subprocessライブラリの使用詳細


紹介する
subprocessモジュールを使用する目的は、OS.systemなどのいくつかの古いモジュールと方法を置き換えることです。
pythonを実行する時、私達はすべて作成して実行しています。Linuxプロセスのように、一つのプロセスは一つのサブプロセスをforkし、このサブプロセスをexecもう一つのプログラムにすることができます。Pythonでは、標準ライブラリのsubprocessパッケージを通じて、サブプロセスをforkし、外部のプログラムを実行します。
subprocessパッケージには、いくつかのサブプロセスを作成する関数が定義されています。これらの関数はそれぞれ異なる方法でサブプロセスを作成しますので、必要に応じて、中から一つを選択して使用します。また、subprocessは、プロセス間でテキスト通信を使用するために、標準ストリームとパイプを管理するツールを提供しています。
モジュールをインポート

>>> import subprocess
コマンド実行コール()
パラメータからのコマンドを実行し、配列をパラメータとしてコマンドを実行します。その機能はOS.system(cmd)に似ています。

>>> subprocess.call(['ls','-l')
パラメータshellはデフォルトでFalseです。
shellがTrueに設定されている場合、直接文字列を送ることができます。

>>> subprocess.call('ls -l',shell=True)
リターン結果を得るためにチェックする。out put()
callは表示の結果に戻らないので、check_を使ってもいいです。ouput()は戻りの結果を得ます。

>>> result = subprocess.check_output(['ls','-l'],shell=True)
>>> result.decode('utf-8')
プロセスの作成と管理
subprocess.popenはos.popenの代わりになります。Popenクラスを作成して、プロセスを作成し、複雑なインタラクションを行うことができます。
待機しないサブプロセスを作成します。

import subprocess

child = subprocess.Popen(['ping','-c','4','www.baidu.com'])
print('Finished')

サブプロセスの追加待ち時間

import subprocess

child = subprocess.Popen(['ping','-c','4','www.baidu.com'])
child.wait() #        
print('Finished')
wait()を追加すると、メインプロセスはサブプロセスの終了を待って次のステートメントを実行します。
サブプロセスのテキストフロー制御
標準出力のリダイレクト:

import subprocess

child = subprocess.Popen(['ls','-l'],stdout=subprocess.PIPE)    #          subprocess.PIPE
print(child.stdout.read()) 

stdinを使用する場合は、それと組み合わせて使用します。

import subprocess

child1 = subprocess.Popen(['cat','/etc/passwd'],stdout=subprocess.PIPE)
child2 = subprocess.Popen(['grep','root'],stdin=child1.stdout,stdout=subprocess.PIPE)

print child2.communicate()

以上が本文の全部です。皆さんの勉強に役に立つように、私たちを応援してください。