サブプロセス輸入popenの、パイプから
1.カーソルが待機状態を点滅している、試験は、リアルタイムCMDインタフェースに出力することができません。
[理由]:使用して通信する()関数で、戻る前に、スクリプトの終了の実行を待つ必要があります。
DEF(自己、入力=なし)通信します。
「」 "プロセスとの対話:標準入力にデータを送信し、ファイルの終わりに到達するまで、stdoutとstderrからデータを読み込み終了させるプロセスを待ちます。。。
オプションの入力引数は子プロセスに送られる文字列である必要があり、またはデータが子に送られるべきでない場合はなし、。
(通信しない)のタプルを返します(標準出力、標準エラー出力)。
「」」
[ソリューション]:subprocess.pollに置き換える機能()、プログラムが戻る1.それ以外の場合はなし/ 0実行を終了します。
世論調査DEF(自己):
「」。「子プロセスが」「」かどうかを確認を終了し、設定RETURNCODE属性を返した
)(self._internal_pollを返す
2.出力結果は、大きな塊をラップしていない...
[原因]:未使用
【解決手段】:whileループ結合のreadline +ポール()機能、印刷stdout.readlineのラインのうちのライン...()
失敗コード:
1つの P1 = popenの([ ' bash.exe '、' run_all_tests.sh '、' のWin32 ' ]、STDOUT = PIPE、シェル= TRUE) 2 印刷のrepr(p1.communicate()[0])#communicate函数
PASSコード:
#
1、P1 = popenの([ ' bash.exe '、' run_all_tests.sh '、' のWin32 ' ]、STDOUT = subprocess.PIPE、シェル= TRUE) 2 ながら p1.poll()されていないなし: 3件のデータ= p1.stdout .readline() 4つの 印刷データ 5 #の印刷のrepr(p1.communicate()[0])
'' '文字XXXを印刷するには、サイクル以下の層の#の複数の 3(しばらくp1.poll)noneである:。 。ラインの4 p1.stdout.readlineに(): 5印刷ライン 6。' ''
2つの方法で変数ENV路の伝送システム3。
3.1は、設定するためのセットで、コマンドライン、窓を模倣します
3.2 [推奨] NAは、クラスを初期化するmy_env subpross.Popen()に直接送信されたコマンドラインパラメータを設定するような問題を効果的にエスケープ記号列を回避することができます
次のように表示popenのクラスのヘルプドキュメントがあります
1 クラスpopenの(オブジェクト): 2 「」」新しいプロセスで子プログラムを実行する。 3 4 引数の完全な説明については、Pythonのマニュアルを参照してください。 5つの 6 引数: 7つの 引数:文字列、またはプログラム引数の配列を。 8 9 BUFSIZE:場合open()関数にバッファ引数として供給される 10は 標準入力/標準出力/標準エラーパイプファイルの作成は、オブジェクト 11 12 。実行するための交換プログラム:実行 13 14 STDIN、stdoutとstderrをこれらの実行を指定しますプログラムの標準 15 入力、標準出力と標準エラー出力ファイルをそれぞれ処理します。 16 17 preexec_fnに:(POSIXのみ)子プロセスで呼び出されるべきオブジェクト 18 子が実行される直前。 19 20 close_fds:コントロールが閉じたり、ファイル記述子の継承します。 21 22 シェル:trueの場合、このコマンドはシェルを介して実行されます。 23 24 CWD:子が実行される前に、現在のディレクトリを設定します。 25 26 ENV:新しいプロセスの環境変数を定義します。 27 28 universal_newlines:trueの場合、ファイルのためのユニバーサル行末を使う 29 標準入力、標準出力と標準エラーオブジェクト。 30 31 STARTUPINFOとcreationflags(Windowsのみ) 32 33 属性: 34 STDIN、STDOUT、PID、標準エラー、リターンコード 35 ""を」 36 _child_created = Falseの #__del__がそれをチェックするので、ここで設定 37 38 デフ __init__(自己、引数、BUFSIZE = 0 、実行= なし、 39 STDIN =なし、STDOUT =なし、標準エラー= なし、 40 preexec_fnに=なし、close_fds = Falseに、シェル= Falseを、 41 CWD =なし、ENV =なし、universal_newlines =偽、 42 STARTUPINFO =なし、creationflags = 0): 43 "" " 新しいpopenのインスタンスを作成します。"""
だから、コードパラメータが追加できます。
1つの P1 = popenの([ ' bash.exe '、' run_all_tests.sh '、' のWin32 ' ]、STDOUT = PIPE、シェル= Trueを、ENV = my_env)