我的嵌入式python标准都到哪里去了?

我的嵌入式python标准都到哪里去了?,python,python-3.4,python-embedding,Python,Python 3.4,Python Embedding,考虑以下几点: 但当我重定向输出时,python代码中没有任何内容: $ ./test | cat Test 1 Test 2 Test 4 发生了什么事?更重要的是,如何像预期的那样将python输出写入标准输出?当标准输出引用一个终端时,输出是行缓冲的,否则是块缓冲的或完全缓冲的,在块满之前不会输出 要在stdout指非终端时缓冲输出线,请将模式设置为 您必须调用Py_Finalize()才能让libpython关闭其I/O句柄 #include <Python.h> #inc

考虑以下几点:

但当我重定向输出时,python代码中没有任何内容:

$ ./test | cat
Test 1
Test 2
Test 4

发生了什么事?更重要的是,如何像预期的那样将python输出写入标准输出?

当标准输出引用一个终端时,输出是行缓冲的,否则是块缓冲的或完全缓冲的,在块满之前不会输出

要在
stdout
指非终端时缓冲输出线,请将模式设置为
您必须调用
Py_Finalize()
才能让
libpython
关闭其I/O句柄

#include <Python.h>
#include <stdio.h>

int
main(int argc, char **argv) {
    //setlinebuf(stdout);
    setvbuf(stdout, NULL, _IOLBF, 0);
    printf("Test 1\n");
    Py_Initialize();
    printf("Test 2\n");
    PyRun_SimpleString("print('Test 3')");
    Py_Finalize();
    printf("Test 4\n");
    return 0;
}
#包括
#包括
int
主(内部argc,字符**argv){
//setlinebuf(标准输出);
setvbuf(标准输出,NULL,_IOLBF,0);
printf(“测试1\n”);
Py_初始化();
printf(“测试2\n”);
PyRun_SimpleString(“打印(“测试3”)”);
Py_Finalize();
printf(“测试4\n”);
返回0;
}

在当前Python中,您可以使用
Py_unbufferedsdioflag

有趣的是,如果您添加
”导入系统;sys.stdout.flush()。调用
Py\u Finalize()
可能不是为了他的用例。@tynn如果你不调用
Py\u Finalize()
输出是无序的,那是Python的。啊。。。当然,现在一切都很明显:)谢谢!
$ ./test | cat
Test 1
Test 2
Test 4
#include <Python.h>
#include <stdio.h>

int
main(int argc, char **argv) {
    //setlinebuf(stdout);
    setvbuf(stdout, NULL, _IOLBF, 0);
    printf("Test 1\n");
    Py_Initialize();
    printf("Test 2\n");
    PyRun_SimpleString("print('Test 3')");
    Py_Finalize();
    printf("Test 4\n");
    return 0;
}