gpt4 book ai didi

python - 一个非常简单的 python subprocess.Popen 任务带来无尽的问题

转载 作者:太空宇宙 更新时间:2023-11-03 19:37:34 26 4
gpt4 key购买 nike

我希望 python 将大约 50 万个 0-255 范围内的整数发送到用 C++ 编写的可执行文件。然后,该可执行文件将返回几千个整数。各占一行。这看起来对于子进程来说应该非常简单,但我遇到了无尽的麻烦。现在我正在使用代码进行测试:

// main()
u32 num;
std::cin >> num;

u8* data = new u8[num];
for (u32 i = 0; i < num; ++i)
std::cin >> data[i];

// test output / spit it back out
for (u32 i = 0; i < num; ++i)
std::cout << data[i] << std::endl;

return 0;

在 python 中构建一个字符串数组(“data”),每个字符串类似于“255\n”,然后使用:

output = proc.communicate("".join(data))[0]

...不起作用(说标准输入已关闭,可能一次太多)。使用 proc.stdin 和 proc.stdout 都不起作用。这应该非常简单,但我不断遇到异常,和/或没有输出数据返回给我。我的 Popen 目前是:

proc = Popen('aux/test_cpp_program', stdin=PIPE, stdout=PIPE, bufsize=1)

在我拔掉头发之前给我建议。 ;)

最佳答案

这对我来说非常有效:

#include <iostream>

int main()
{
int num;
std::cin >> num;

char* data = new char[num];
for (int i = 0; i < num; ++i)
std::cin >> data[i];

// test output / spit it back out
for (int i = 0; i < num; ++i)
std::cout << data[i] << std::endl;

return 0;
}

python :

In [9]: from subprocess import Popen, PIPE
In [10]: a = Popen('./a.out', stdin=PIPE, stdout=PIPE)
In [11]: a.stdin.write("2\nab")
In [12]: a.stdout.read()
Out[12]: 'a\nb\n'

请注意,我在要写入的字节数之间添加了一个分隔符 (\n),如果您不希望 C++ cin 发送 3,1,2,3 之类的内容时失败,这是最安全的,这些内容将连接到第3123章 期待这么多争论。

关于python - 一个非常简单的 python subprocess.Popen 任务带来无尽的问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2701364/

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