如何从Qt4在Linux下运行命令行程序?当然我想以某种方式获得输出我可以使用.我会用它来做ls | grep,但是对于任何未来的问题都很有用.
我想知道是否有一个跨平台(Windows、Linux、BSD)库,我可以用它异步启动一个进程,并iostream为其标准管道提供类似的包装器。
我希望它能够知道进程何时终止。
谢谢。
我是qt开发的新手,我想将QProcess的输出实时传输到textBrowser.我开始执行一个简单的echo命令,但程序的输出没有显示出来.我究竟做错了什么????
QProcess p;
p.start("echo hye");
QByteArray byteArray = p.readAllStandardOutput();
QStringList strLines = QString(byteArray).split("\n");
QString line= p.readAllStandardOutput();
if(p.state()==QProcess::NotRunning)
ui->textBrowser->append("not running");
foreach (QString line, strLines){
ui->textBrowser->append(line);}
Run Code Online (Sandbox Code Playgroud)
PS我在linux机器上.
编辑:我仍然无法在textBrowser中获取输出.
我更改了Qprocess参数并尝试了waitForStarted()和waitForReadyRead(),以便进程及时启动并且结果可用.
我添加了waitForFinished(),以便当进程超出范围时进程不会终止.
QProcess p;
p.start("echo", QStringList() << "hye");
p.waitForStarted();
QByteArray byteArray = p.readAllStandardOutput();
QStringList strLines = QString(byteArray).split("\n");
QString line= p.readAllStandardOutput();
if(p.state()==QProcess::NotRunning)
ui->textBrowser->append("not running");
ui->textBrowser->append(line);
p.waitForFinished();
Run Code Online (Sandbox Code Playgroud) 我是Qt的初学者.我需要从桌面应用程序中的按钮调用命令行程序.该计划下载YouTube视频.我还需要从中读取标准错误.我写了以下代码:
void YoutubeDL::on_downloadButton_clicked()
{
[...]
QProcess p;
p.startDetached("youtube-dl -f " + get + " " + ui->urlBox->text());
QString perr = p.readAllStandardError();
if (perr.length())
ui->descBox->setText("Error during download.\n" + perr);
else
ui->descBox->setText("Download completed!");
}
Run Code Online (Sandbox Code Playgroud)
然而,stderr读取不会发生.
在另一方面,如果我使用非分离p.start(),然后waitForFinished(-1)再我可以读取标准错误,但是GUI冻结,直至下载完成.
怎么解决这个问题?
一个相关的问题:我还想要一些方法能够实时读取下载过程的输出,以便我可以在GUI中显示它.youtube-dl给出了这样的进度报告:
[download] 0.0% of 2.00MiB at 173.22KiB/s ETA 00:12
[download] 0.1% of 2.00MiB at 105.01KiB/s ETA 00:19
[download] 0.3% of 2.00MiB at 96.86KiB/s ETA 00:21
[download] 0.7% of 2.00MiB at 105.23KiB/s ETA 00:19
[download] 1.5% of 2.00MiB at 100.29KiB/s ETA …Run Code Online (Sandbox Code Playgroud)