python sys.stdout and C++ iostreams::cout
python sys.stdout and C++ iostreams::cout
我假设sys。Stdout将引用与在同一进程中运行的iostreams::cout相同的物理流,但情况似乎并非如此。下面的代码用python包装器"write"调用一个c++函数,写入到cout:
from cStringIO import StringIO
import sys
orig_stdout = sys.stdout
sys.stdout = stringout = StringIO()
write("cout") # wrapped C++ function that writes to cout
print "-" * 40
print "stdout"
sys.stdout = orig_stdout
print stringout.getvalue()
立即将"cout"写入控制台,然后将分隔符"——…"写入控制台,最后将字符串"stdout"作为stringout.getvalue()的返回值。我的意图是在stringout中捕获从c++中写入cout的字符串。有没有人知道发生了什么,如果是这样,我怎么能捕捉什么是写在一个python字符串?
提前感谢。
sys.stdout
是一个Python对象,用于写入标准输出。它实际上不是标准输出文件句柄;它包装文件句柄。在python语言中改变sys.stdout
指向的对象不会以任何方式影响c++中的stdout
句柄或std::cout
流对象。
在comp.lang.python的帮助下,在这个网站上搜索了一下:正如cdhowie指出的,必须在较低级别访问标准输出文件句柄。实际上,它的文件描述符可以通过sys.stdout.fileno()(应该是1)获得,然后是os. stdout.fileno()。Dup和os。可以使用Dup2。
我发现这个类似问题的答案很有帮助。
我真正想要的是捕获一个字符串的输出,而不是一个文件。然而,python StringIO类没有文件描述符,不能用来代替实际的文件,所以我提出了一个不完全令人满意的解决方案,其中写入临时文件并随后读取。
它不可能是同一个流,因为Python是用同一个流编写的C,而不是c++,并且不能访问std::cout
。它是否使用stdout
或基于fd 1实现自己的流,我不知道,但无论如何,你最好在两者之间冲洗一下使用两个对象(Python和c++)进行写入。
- 请解释这句话(cout<<1+int((a<b)^((b-a)&1) )<<endl
- std::cout.imbue()多重调用
- 如何在C++中用std::cout正确显示带十六进制的字符串文本
- 为什么在C的循环中使用printf的Rust代码不显示输出,而在C++的循环中显示std::cout
- 为什么我应该在异常处理中使用std::cerr而不是std::cout
- 在作为静态成员包含在另一个类中的类的构造函数中使用 cout
- 在 COUT 语句中使用 COUT 调用函数
- GCC 4.8.2 自动矢量化由于 cout 而失败
- std::cout输出int时出现编译错误
- 在这种情况下显式调用时,std::cout 如何更改析构函数的行为?
- C++ Setter/Getter,cout 工作,printf 失败
- C++ cout 将双精度对齐到精度 2 并正确对齐
- 隐式声明的 boost::iostreams::mapped_file_source 已被弃用
- 结构元素名称要 cout?
- 使用模板类重载 cout
- 犰狳的 print() 方法和 cout 在从 Rcpp 调用时顺序不一致
- 带有 cout 的指针在C++
- cout 指针时的实际数字
- 如何通过 boost::iostreams 管道进入 std::cout
- python sys.stdout and C++ iostreams::cout