使用Python的C ++ I / O.

时间:2010-01-19 12:28:32

标签: c++ python

我正在用Python编写一个模块,它使用子进程模块运行C ++程序。一旦我从C ++获得输出,我需要将它存储在Python List中。我该怎么做?

4 个答案:

答案 0 :(得分:6)

这是我使用的一种快速而肮脏的方法。

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()]

答案 1 :(得分:2)

一种肮脏的方法:

您可以使用Python从stdin读取(raw_input)(如果没有输入,它将等待)。 C ++程序写入stdout。

答案 2 :(得分:1)

根据您的评论,假设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 ++程序输出带有换行符作为分隔符的数字,或者白色空间的任意组合,则无关紧要。)

答案 3 :(得分:0)

在该过程的命令中,您可以重定向到临时文件。然后在进程返回时读取该文件。