此问题与this one类似。 不同之处在于,那里指定的解决方案并不总是有效。
示例1
QProcess * process;
process = new QProcess();
process->start("/usr/bin/env");
process->waitForFinished(-1);
QString p_stdout = process->readAllStandardOutput();
qDebug() << p_stdout;
//output
HOME=/home
PATH=/usr/bin:/bin:/usr/sbin:/sbin:/sbin:/usr/sbin
DISPLAY=:0.0
SHELL=/bin/sh
PWD=/home
一切正常,输出就像在终端输入/usr/sbin/env
一样。
示例2
QProcess * process;
process = new QProcess();
process->start("/usr/sbin/iptables");
process->waitForFinished(-1);
QString p_stdout = process->readAllStandardOutput();
qDebug() << p_stdout;
//output
""
相同的代码,只是一个不同的命令,没有输出。当我在终端中输入/usr/sbin/iptables
iptables v1.4.16.3:未指定命令 尝试使用`iptables -h'或'iptables --help'获取更多信息。
位它不会出现在p_stdout
中。
这个解决方案的优势是什么?