2017-09-19 23 views
0

私は現在、サブプロセスとマルチプロセッシングでPythonからシリアルシェルコマンドを起動しています。ここでコードが本物ではありませんが、似た:サブプロセスとマルチプロセッシングでPythonから "shell"コマンドを実行

def fakeFunc(cmd): 
     print("the pid "+str(os.getpid())+"begin", end=":") 
     process=Popen(cmd, stdout=PIPE, shell=True, stderr=STDOUT) 
     for line in iter(process.stdout.readline,b''): 
      line_str=line.decode(sys.stdout.encoding) 
      ##### analyse line_str###### 
    with Pool() as pool: 
     cmds=['mkdir -p /home/jeff/workspace/zebu/compile/vdv && cd /home/jeff/workspace/zebu/compile/vdv && compile', 'mkdir -p /home/jeff/workspace/zebu/compile/vdr && cd /home/jeff/workspace/zebu/compile/vdr && compile', 'mkdir -p /home/jeff/workspace/zebu/compile/rdv && cd /home/jeff/workspace/zebu/compile/rdv && compile'] 
     pool.map_async(fakeFunc, cmds) 
     pool.close() 
     pool.join() 

CMDSで最後のものだけが実行されているようだ、他の三つのものがprint("the pid "+str(os.getpid())+"begin", end=":")後、関数の外にジャンプします。任意のヘルプが評価されています

答えて

0

あなたのfakeFuncの本体をにキャリング例外で囲むことで、何が間違っているのかが分かります。

def fakeFunc(cmd): 
    try: 
     print("the pid " + str(os.getpid()) + " begin", end=":\n") 
     process = Popen(cmd, stdout=PIPE, shell=True, stderr=STDOUT) 
     for line in iter(process.stdout.readline, b''): 
      line_str = line.decode(sys.stdout.encoding) 
      ##### analyse line_str###### 
    except Exception as e: 
     print(e) 

with Pool() as pool: 
    cmds=['mkdir -p /home/jeff/workspace/zebu/compile/vdv && cd /home/jeff/workspace/zebu/compile/vdv && compile', 'mkdir -p /home/jeff/workspace/zebu/compile/vdr && cd /home/jeff/workspace/zebu/compile/vdr && compile', 'mkdir -p /home/jeff/workspace/zebu/compile/rdv && cd /home/jeff/workspace/zebu/compile/rdv && compile'] 
    pool.map_async(fakeFunc, cmds) 
    pool.close() 
    pool.join() 
+0

ご協力いただきありがとうございます。 – hyperion007

関連する問題