使用 Python 的 C++ I/O
Posted
技术标签:
【中文标题】使用 Python 的 C++ I/O【英文标题】:C++ I/O with Python 【发布时间】:2010-01-19 12:28:32 【问题描述】:我正在用 Python 编写一个模块,该模块使用子进程模块运行 C++ 程序。从 C++ 获得输出后,我需要将其存储在 Python List 中。我该怎么做?
【问题讨论】:
什么定义了列表中的项目?每行都是一个项目? 输出是一个数字数组。我需要将它们存储在列表中 您应该编辑您的帖子并向我们展示 C++ 程序输出数字的确切格式示例。 a[] =123,98394, 7889934。我正在使用 cout 一张一张打印出来 用换行符分隔?您可以使用subprocess
模块将数据输入您的C 程序吗?如果是,那么我给你的答案应该有效。否则,其他答案应该有效。
【参考方案1】:
这是我使用过的一种快速而肮脏的方法。
def run_cpp_thing(parameters):
proc = subprocess.Popen('mycpp' + parameters,
shell=True,
stdout=subprocess.PIPE,
stderr=subprocess.PIPE,
stdin=subprocess.PIPE)
so, se = proc.communicate()
# print se # the stderr stream
# print so # the stdio stream
# I'm going to assume so =
# "1 2 3 4 5"
# Now parse the stdio stream.
# you will obvious do much more error checking :)
# **updated to make them all numbers**
return [float(x) for x in so.next().split()]
【讨论】:
【参考方案2】:一种肮脏的方法:
您可以使用 Python 从 stdin 读取 (raw_input) (如果没有输入,它将等待)。 C++ 程序写入标准输出。
【讨论】:
【参考方案3】:根据您的评论,假设 data
包含输出:
numbers = [int(x) for x in data.split()]
我假设数字由空格分隔,并且您已经从 C++ 程序中获得了 Python 中的字符串(即,您知道如何使用 subprocess
模块)。
编辑:假设你的 C++ 程序是:
$ cat a.cpp
#include <iostream>
int main()
int a[] = 1, 2, 3, 4 ;
for (int i=0; i < sizeof a / sizeof a[0]; ++i)
std::cout << a[i] << " ";
std::cout << std::endl;
return 0;
$ g++ a.cpp -o test
$ ./test
1 2 3 4
$
然后,您可以在 Python 中执行此操作:
import subprocess
data = subprocess.Popen('./test', stdout=subprocess.PIPE).communicate()[0]
numbers = [int(x) for x in data.split()]
(不管你的 C++ 程序输出的数字是用换行符作为分隔符,还是任何空白字符的组合。)
【讨论】:
我的疑问是关于在 Python 中将 C++ 中的数组作为列表访问。好的 那么如何从 Python 访问 C++ 数组 您需要将数组从 C++ 打印到stdout
(例如使用 std::cout
)。然后,使用subprocess.Popen()
与你的C++程序进行通信,然后得到如上的数字。
老兄,我猜你误解了。 Python 模块使用 Subprocess 运行 C++ 程序。 C++ 输出一个数组。我需要在不使用临时存储的情况下在 Python 模块中捕获该输出
老兄,他准确地告诉你你需要做什么。您的 C++ 程序正在输出 text。 Python 正在以文本形式读取数据。【参考方案4】:
在进程的命令中,您可以重定向到临时文件。然后在进程返回时读取该文件。
【讨论】:
以上是关于使用 Python 的 C++ I/O的主要内容,如果未能解决你的问题,请参考以下文章
从 c++ 代码运行 python 脚本并在 c++ 中使用 pythons 输出