PythonQt 不打印任何东西

Posted

技术标签:

【中文标题】PythonQt 不打印任何东西【英文标题】:PythonQt doesn't print anything 【发布时间】:2016-08-29 20:35:57 【问题描述】:

我正在关注http://pythonqt.sourceforge.net/Examples.html 的示例,但 PythonQt 不会在控制台上打印任何内容。我执行了一个只打印hello 的脚本,但没有打印任何内容。

PythonQt::init();
PythonQtObjectPtr context = PythonQt::self()->getMainModule();
context.evalScript("print 'hello'\n");

另一方面,如果我使用普通的 python 嵌入执行它,它可以工作并打印hello

Py_Initialize();
PyRun_SimpleString("print 'hello'\n");

有趣的是,如果我在Py_Initialize(); 之前添加PythonQt::init();,则不会再次打印任何内容。所以我假设PythonQt::init(); 对python 的控制台输出做了一些事情。它是否以某种方式重定向它?如何打印?

我使用的是 Qt 4.8.6、PythonQt 2.1 和 Python 2.7.6。

【问题讨论】:

【参考方案1】:

在阅读https://sourceforge.net/p/pythonqt/discussion/631393/thread/33ad915c 之后,似乎PythonQt::init(); 确实将python 输出重定向到了PythonQt::pythonStdOut 信号。

这是因为PythonQt::init() 声明默认设置RedirectStdOut

static void init(int flags = IgnoreSiteModule | RedirectStdOut, const QByteArray& pythonQtModuleName = QByteArray());

所以现在可以了:

PythonQt::init(PythonQt::IgnoreSiteModule);
PythonQtObjectPtr context = PythonQt::self()->getMainModule();
context.evalScript("print 'hello'\n");

或者,我可以连接信号:

QObject::connect(PythonQt::self(), SIGNAL(pythonStdOut(const QString&)), this, SLOT(Print(const QString&)));

【讨论】:

以上是关于PythonQt 不打印任何东西的主要内容,如果未能解决你的问题,请参考以下文章

Django 网站有时不打印任何东西

在释放模式 cout 不打印任何东西

了解汇编、nasm、x86 中的 printf 函数。我不知道为啥这段代码没有打印出任何东西

多处理程序(生产者-消费者)退出而不打印任何东西 Python 3

我的程序创建一个char数组的缩写,不打印任何东西。我的错误在哪里?

cout没有打印任何东西到控制台