1

몇 초가 걸리는 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

관련 문제