我需要強制我的C++ QT4應用程序從linux命令讀取結果。我正在嘗試使用Qprocess,但一旦我的命令變得複雜,它就會以某種方式被弄亂(只是猜測)並且不起作用。Qprocess混淆我的Linux命令(我認爲)。怎麼修?
在這裏,我試圖做出宇一個小例子:
QProcess process;
command = "ls -l | grep a | sort";
qDebug() << "Execute command -> "+command;
process.start(command);
process.waitForFinished(-1);
QString processStdout = process.readAllStandardOutput();
QString processStderr = process.readAllStandardError();
qDebug() << "Std out -> "+processStdout;
qDebug() << "Std err -> "+processStderr;
會打印:
Execute command -> ls -l | grep a | sort
"Std out -> "
"Std err -> ls: |: No such file or directory
,同時將正確打印的文件名,如果從CONSOL符文。
如果我用一些簡單的東西替換comman,例如command = "ls -l";
,它將無法正常工作 該錯誤是由操作系統在標準錯誤上返回的。
因此,我猜測用於該命令的Qstring會以某種方式被操縱。有關這種事情發生的任何想法?
我不認爲它只是|。如果我使用命令egrep -l'aaa'/ user/*/mydir/*說egrep:/ user/*/mydir/*沒有這樣的文件或目錄。 和在這個命令我沒有| – Stefano
同樣的問題。 *通配符也由shell解釋。在shell上發生的事情是,通配符被替換,並且命令被所有匹配的文件調用。如果使用QProcess,則不會執行這樣的替換,並且grep被稱爲egrep「/ user/*/mydir/*」(注意「,即該模式作爲參數給予egrep)。你也會遇到同樣的問題。 – LiKao
現在我明白了。非常感謝! – Stefano