1

数秒かかるbashコマンドから情報を取得する必要があります。リターンコードを取得するまで、残りのプログラムを続行します。私はマルチプロセッシングでそれをやろうとしましたが、コンソールが正しいリターンコードを出力しても、サブプロセスのリターンコードは取得できません。新しいプロセスでBashコマンドを実行する

from multiprocessing import Process, Value 
import subprocess 

num = Value("d", 0.0) 

class foo(object): 
    def __init__(self): 
     self.createProcess() 

    def createProcess(self): 
     p = Process(target=self.Process, args=(num,)) 
     p.start() 
     ...Do Stuff here in parallel... 

    def Process(self,n): 
     somebashParam = int(n.value) 
     p = subprocess.Popen("some -command"+str(somebashParam),shell=True) 
     out, err = p.communicate() 
     n.value = p.returncode 
  1. なぜコンソールは、右のリターンコードをプリントアウトしないが、私はそれをつかむカント?
  2. 他の新しいプロセスでサブプロセスを起動するのは奇妙なことです。より良い方法がありますか?

答えて

1

外部プロセスは自動的に並行して実行されます。リターンコードのみに興味がある場合は、追加コードは必要ありません。

n = 23 
process = subprocess.Popen(["some", "-command", str(n)]) 
while process.poll() is None: 
    do_something_else() 
result = process.wait() 
+0

なぜプロセスをポーリングしますか?単純に 'do_something_else()'と 'process.wait()'の方が意味をなさないでしょうか? – hek2mgl

+0

@ hek2mgl:結果を待つ方法によって異なります。 – Daniel

+0

どういう意味ですか? – hek2mgl

関連する問題