gpt4 book ai didi

c++ - Python 和 C++ 之间的管道不会关闭

转载 作者:太空狗 更新时间:2023-10-29 20:05:48 26 4
gpt4 key购买 nike

我正在使用子进程在 python 中生成一个进程,并希望使用管道从程序中读取输出。 C++ 程序似乎并没有关闭管道,即使在明确告诉它关闭时也是如此。

#include <cstdlib>
#include <ext/stdio_filebuf.h>
#include <iostream>

int main(int argc, char **argv) {
int fd = atoi(argv[1]);
__gnu_cxx::stdio_filebuf<char> buffer(fd, std::ios::out);
std::ostream stream(&buffer);
stream << "Hello World" << std::endl;
buffer.close();
return 0;
}

我用这个 python 片段调用这个小程序:

import os                                                                                         
import subprocess

read, write = os.pipe()
proc = subprocess.Popen(["./dummy", str(write)])
data = os.fdopen(read, "r").read()
print data

read() 方法不返回,因为 fd 没有关闭。在python中打开和关闭write fd解决了问题。但这对我来说似乎是一个黑客。有没有办法在我的 C++ 进程中关闭 fd?

非常感谢!

最佳答案

在 Linux(实际上是所有 POSIX 操作系统)上生成子进程通常是通过 forkexec 完成的。 fork 之后,两个进程都打开了文件。 C++ 进程关闭它,但文件保持打开状态,直到父进程也关闭 fd。这对于使用 fork 的代码来说是正常的,通常由 fork 的包装器处理。阅读 pipeman 页面。我想 python 无法知道哪些文件正在传输给子进程,因此不知道在父进程和子进程中关闭什么。

关于c++ - Python 和 C++ 之间的管道不会关闭,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11319939/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com