我想在QT C ++程序中使用python解释器, 我尝试使用QProcess打开一个python控制台:
QProcess shell; // this is declared in the class .h file
shell.start("python");
connect(&shell,SIGNAL(readyRead()),SLOT(shellOutput()));
shell.write("print 'hello!'\n");
但是我没有抓到任何输出,我在哪里弄错了,还是有更好的方法呢?
答案 0 :(得分:4)
我写了一个非常简约的程序,可以达到你的预期。以下是代码:
<强> mainwindow.hpp 强>
#ifndef MAINWINDOW_HPP
#define MAINWINDOW_HPP
#include <QtGui>
class MainWindow : public QMainWindow
{
Q_OBJECT
public:
explicit MainWindow(QWidget *parent = 0);
private slots:
void onReadyRead();
void onPushButtonClicked();
private:
QPushButton* pushButton;
QProcess *shell;
};
#endif // MAINWINDOW_HPP
<强>的main.cpp 强>
#include <QtCore>
#include <QtGui>
#include <QDebug>
#include "mainwindow.hpp"
MainWindow::MainWindow(QWidget* parent)
: QMainWindow(parent)
{
pushButton = new QPushButton("Execute");
connect(pushButton, SIGNAL(clicked()),
this, SLOT(onPushButtonClicked()));
setCentralWidget(pushButton);
}
void MainWindow::onPushButtonClicked()
{
shell = new QProcess(this);
connect(shell, SIGNAL(readyRead()), this, SLOT(onReadyRead()));
shell->start("python");
if (!shell->waitForStarted())
exit(1);
shell->write("print 'hello!'\n");
shell->closeWriteChannel();
if (!shell->waitForFinished())
exit(1);
qDebug() << "Shell error code:" << shell->error();
}
void MainWindow::onReadyRead()
{
QString text = shell->readAll();
qDebug() << text;
}
int main(int argc, char* argv[])
{
QApplication app(argc, argv);
MainWindow win;
win.show();
return app.exec();
}
实施说明:
QProces::waitFor...()
。QProcess::closeWriteChannel()
。QProcess
的错误代码非常有帮助。当按下按钮时,这些事物一起显示出激励hello!
。
答案 1 :(得分:1)
我发现什么是错的......
python解释器必须以-i参数开头:python -i
否则它不会对标准输出和输入作出反应。
我很好奇它没有使用-i