使用 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++ 中使用 Python?

从 c++ 代码运行 python 脚本并在 c++ 中使用 pythons 输出

使用 python 和 c++ 的 Windows 应用程序

使用 C++ 加速 Python

如何使用 ctypes 将此 Python 对象移动到 C++ 中?