我想以编程方式运行Linux命令并在文本浏览器中显示输出。这是我的代码:
void MainWindow::on_pushButton_clicked(){
QString qstr;
FILE *cl = popen("ifconfig eth0", "r");
char buf[1024];
while (fgets(buf, sizeof(buf), cl) != 0) {
qstr = QString::fromutf8(buf);
ui->textBrowser->setText(qstr);
}
pclose(ls);
}
但我在文本浏览器中什么都没有。如果我使用qstr
更改ui->textBrowser->setText(qstr);
中的"string"
,则可以正常使用。
有帮助吗?!感谢。
答案 0 :(得分:5)
在你使用popen的例子中:
qstr += QString::fromUtf8(buf);
但最好使用QProcess。对于动态输出使用:
QProcess* ping_process = new QProcess(this);
connect(ping_process, &QProcess::readyReadStandardOutput, [=] {
ui->textBrowser->append(ping_process->readAllStandardOutput());
});
ping_process->start("ping", QStringList() << "8.8.8.8");
使用lambda时不要忘记添加.pro文件:
CONFIG += c++11
答案 1 :(得分:2)
使用:
QProcess p.
p.start("your_command");
p.waitForFinished(-1);
ui->textBrowser->setText(p.readAllStandardOutput());
// or
ui->textBrowser->setText(p.readAllStandardError());
比取消popen
要容易得多。
答案 2 :(得分:0)
我的功能允许使用shell
或grep
awk
调用。
QString shell_command(const char *input) {
QProcess p;
QString command = QString::fromLatin1(input);
p.start("/bin/sh", QStringList() << "-c" << command);
p.waitForFinished(-1);
qDebug() << "run" << command;
auto res = p.readAllStandardOutput();
auto err = p.readAllStandardError();
qDebug() << "out" << res;
qDebug() << "err" << err;
return res;
}