尝试使用QProcess运行python控制台时无法获得输出

时间:2012-08-06 14:28:17

标签: python qt

我想在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");

但是我没有抓到任何输出,我在哪里弄错了,还是有更好的方法呢?

2 个答案:

答案 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...()
  • 来使用同步API
  • 我使用QProcess::closeWriteChannel()
  • 关闭了通讯渠道
  • 我添加了一些调试输出,尤其是QProcess的错误代码非常有帮助。

当按下按钮时,这些事物一起显示出激励hello!

答案 1 :(得分:1)

我发现什么是错的......

python解释器必须以-i参数开头:python -i

否则它不会对标准输出和输入作出反应。

我很好奇它没有使用-i