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

 Смежные вопросы

  • Нет связанных вопросов^_^