2017-03-11 32 views
0

親コードから無限ループスクリプトを呼び出したい。Pythonでのサブプロセス

from subprocess import Popen 
import subprocess 
import os 
import sys 
proc=subprocess.Popen([sys.executable, os.getcwd()+'/A.py'],shell=False, stdout=subprocess.PIPE) 
print(proc.communicate()) 
print('Hi') 

と私のスクリプトは次のとおりです。

import time 

def main(): 
    while True: 
     print('HI2') 
     time.sleep(3) 
if __name__ == '__main__': 
    main()` 

が、それは動作しませんし、popenのは、スクリプトをブロックしません。つまり、なぜprint( 'Hi')構文が機能しないのかということです。

答えて

1

proc.communitcate()procが終了するのを待ちます。次に、サブプロセスからの出力を返します。この例では

うちは標準出力に印刷出力さとstderrに出力を誤る:あなたは出力、シンプルスキップcommunicate()を必要としない場合

out, err = proc.communicate() 

+0

無限の子プロセスを終了する方法を教えてください。 –

+0

あなたはそのために 'proc.terminate()'を使用できるはずです –

+0

あなたの答えをありがとう。 Eサブプロセス呼び出しスクリプトを含み、各スクリプト内にはマルチプロセスがあります。親プロセス(私はスクリプトを閉じることを意味します)を終了している間、子プロセスはまだ生きています! –