有一个程序将运行用于安装 python 模块的脚本(bat 文件)
@echo off
chcp 1251
cls
set /P var="Введите название модуля, который нужно установить:"
cd /d "C:\Users\Пользователь\AppData\Local\Programs\Python\Python37-32\Scripts"
pip install %var%
pause
我的程序应该运行这个文件并将这个文件输出的所有内容输出到 textLabel。这是程序:
#include "mainwindow.h"
#include "ui_mainwindow.h"
#include <QProcess>
MainWindow::MainWindow(QWidget *parent)
: QMainWindow(parent)
, ui(new Ui::MainWindow)
{
ui->setupUi(this);
}
MainWindow::~MainWindow()
{
delete ui;
}
void MainWindow::on_pushButton_clicked()
{
QString program = "PyModuleInstaller.bat";
QStringList arguments;
arguments << "absads";
QProcess *myProcess = new QProcess(this);
myProcess->start(program, arguments);
myProcess->waitForFinished();
connect(myProcess, &QProcess::readAllStandardError, [&]() {
ui->label->setText( myProcess->readAllStandardError() );
});
}
当您按下按钮时,程序会冻结,然后在 15 秒后返回。textLabel 中没有任何内容(尽管设置 absads 模块会引发错误)。如何在 textLabel (或类似的东西)中输出错误?
应用程序挂起是因为在您有命令的进程中,
pause程序应该在暂停结束时挂起,但由于您没有需要暂停的代码,您可以将其删除。关于挂起 15 秒 - 您需要将其重写为 readyRead 信号 - 因此该过程的输出将逐渐出现在屏幕上。但是在 pip 上,可以使用转义序列,因此输出可能是脏的。在 Windows 下不那么强大(你需要检查它是如何工作
\r的QLabel)至于
set批处理文件,我也不确定......输入和参数是不同的东西。