【问题标题】:Execute Bash Command in new Process在新进程中执行 Bash 命令
【发布时间】:2017-01-08 08:52:03
【问题描述】:

我需要从 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. 在另一个新进程中启动子进程对我来说似乎很奇怪。有没有更好的方法?

【问题讨论】:

    标签: python bash parallel-processing subprocess multiprocessing


    【解决方案1】:

    外部进程自动并行运行。如果您只对返回码感兴趣,则不需要任何额外的代码:

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

    【讨论】:

    • 为什么要轮询进程?简单地do_something_else() 然后process.wait() 不是更有意义吗?
    • @hek2mgl:这取决于您希望如何等待结果。
    • 什么意思?
    • 首先感谢丹尼尔解决了我的问题。 @hek2mgl 在我的程序中,其余的代码将被重复,直到我得到结果。所以我必须使用 process.poll()。如果剩下的代码只执行一次,你可以使用 process.wait()
    • 我明白了,在这种情况下,投票是有意义的。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2017-05-03
    • 2012-04-13
    • 2011-11-03
    • 2023-04-04
    • 2014-08-27
    • 2017-02-02
    • 1970-01-01
    相关资源
    最近更新 更多