检测停止进程Python

2024-10-04 01:35:35 发布

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

我有一个C程序。我希望它在特定点运行并停止,并让python脚本在停止时执行一些操作。你知道吗

我所做的是把这条线放在C程序的停止点上:

kill(getpid(), SIGSTOP);

如果我的python代码有以下行:

subprocess.call("./prog");

它永远被卡住,因为C程序永远不会终止。你知道吗

如果我用这个:

subprocess.Popen("./prog");

它在代码部分完成之前恢复。你知道吗

如何检查子进程是否已停止? 还是有别的解决办法? 对我来说保持C程序运行是非常重要的。你知道吗

谢谢你, 玛丽娜


Tags: 代码程序脚本程序运行进程callsubprocesskill
2条回答

我不知道您的目的是什么,如果要检查子进程的状态,请使用^{},如果要等待它停止,请使用^{}。你知道吗

或者你需要定期检查它的状态?如果是,请尝试^{}。你知道吗

为了使Python脚本的执行与子C进程同步,您可以使用通信,例如,在Python执行某些操作时,将一个字节写入C程序中的stdoutputchar('\0'),并尝试读回一个chargetchar()以继续执行,在Python脚本中则相反:读取一个字节,开始做某事,并将字节写入信号C程序以继续:

from subprocess import Popen, PIPE

# start child process, do not block Python
p = Popen("./prog", stdin=PIPE, stdout=PIPE, bufsize=0)
while p.poll() is None: # while C program is running
    # block here until C program writes a byte and flushes its stdout buffer
    if not p.stdout.read(1): # EOF
        break
    # .. do something while C program waits
    p.stdin.write(b'\0') # signal C program to continue

要在C中解除缓冲标准输出,请在C程序的最开始处调用:

setvbuf(stdout, NULL,_IONBF,0);

否则,在显式调用fflush()或相应的缓冲区溢出之前,Python程序不会看到任何输出。你知道吗

相关问题 更多 >