在python中使用PID启动进程和重用

2024-04-19 23:52:55 发布

您现在位置:Python中文网/ 问答频道 /正文

我的主进程/线程启动一个可执行文件,它在回显Algorithm loaded之后开始等待信号。我正在使用subprocess.Popen类来运行可执行文件。 稍后,启动一个线程,该线程应该向先前启动的可执行文件发送信号。但我不知道如何从该线程向特定的子进程发送信号。
是否可以使用PID传递PID“recover”子进程?重用该进程的目的是发送相当于stdin的内容。在


以下是我启动可执行文件的代码:

def start_module():
    cmd = '%s/libraries/OpenBR' % settings.MODULES_DIR
    process = subprocess.Popen(cmd,stdout=subprocess.PIPE)

    while True:
        line = process.stdout.readline()
        if line.find('Algorithm loaded') > -1:
            break

    return 0

Tags: 目的cmd可执行文件信号进程stdoutline线程
1条回答
网友
1楼 · 发布于 2024-04-19 23:52:55

代码中的process变量引用一个Popen对象,该对象支持pid属性。如果您让您的start_module函数返回进程,您可以稍后使用os.kill向它发送一个信号。例如:

def start_module():
    cmd = '%s/libraries/OpenBR' % settings.MODULES_DIR
    process = subprocess.Popen(cmd,stdout=subprocess.PIPE)

    while True:
        line = process.stdout.readline()
        if line.find('Algorithm loaded') > -1:
            break

    return process

p = start_module()
os.kill(p.pid, signal.SIGALRM)

据我所知,使用线程或不发送信号应该没有任何区别。请注意,os.kill并不一定要杀死一个进程:它向它发送一个信号,然后该进程可以适当地处理它(这里是ALARM信号)。在


如果您的目的是将一些输入传递给进程的stdin,那么事情也很简单。您只需将stdin=subprocess.PIPE添加到Popen调用并打印到新进程的stdin属性:

^{pr2}$

相关问题 更多 >