2013-02-24 163 views
0

我需要調用QProcess來啓動xterm,之後我應該發送一些數據 給它。 爲什麼這些代碼無法正確運行?QProcess調用寫入函數失敗

QProcess proc; 
proc.start("xterm"); 
proc.waitForStarted(); 
proc.write("ls\n"); 
proc.waitForFinished(); 
proc.waitForBytesWritten(); 
qDebug()<<proc.readAllStandardOutput();//output: nothing 
qDebug()<<proc.errorString();//output: "write error" 

感謝你的幫助

+1

您調用的大多數函數都有返回值。如何檢查這些返回值並找出發生了什麼問題? – 2013-02-24 09:58:24

+0

我已經試過了,什麼都很好,但最後的聲明 – tangbongbong 2013-02-25 01:25:29

+0

你是什麼意思「無法正確運行」?它掛了嗎?或者在調試流中不打印任何東西?我沒有看到xterm應該結束它的工作的原因,所以可能你的代碼掛在'proc.waitForFinished();' – 2013-02-25 17:17:56

回答

2

這不是很清楚你試圖在這裏做什麼。你的代碼沒有意義:你不能發送xterm'一些數據'(看起來你希望它爲你執行一些命令,這裏是ls)到它的標準輸入。

如果你想的LS輸出,只要做到這一點:如果你想要一個解釋器在後臺運行,你可以發送命令它執行(如殼)

QProcess proc; 
proc.start("ls"); 
proc.waitForFinished(); 
qDebug() << proc.readAllStandardOutput(); 

你可能會這樣做:

QProcess proc; 
proc.start("/bin/sh"); 
proc.waitForStarted(); 
Q_FOREACH(QString cmd, QStringList() << "ls" << "date" << "echo test") 
{ 
    proc.write((cmd + "\n").toLocal8Bit()); 
    proc.waitForReadyRead(); 
    qDebug() << proc.readAllStandardOutput().split('\n'); 
} 
proc.write("exit\n"); 
proc.waitForFinished(); 
+0

謝謝你的幫助,先生。我知道如何直接調用命令,我真正需要的是在控制檯中調用qemu,在qemu初始化之後,我應該輸入一些信息(使用QProcess?),如用戶名和密碼。這裏真正的問題是爲什麼我不能發送數據到xterm?對不起我的英語,英語不是我的母語 – tangbongbong 2013-02-25 01:17:54

+0

我對qemu一無所知,但也許你應該看看*在[this](http:// landley)的模擬器*部分中輸入/輸出數據.net/aboriginal/presentation.html)doc。顯然,你可以做的東西像連接模擬串行端口qemu的的標準輸入/輸出,然後用像上面的外殼溝通。儘管如此,我並沒有在這張照片的任何地方看到xterm。這可能很好,你試圖做的事情是不可能的。我建議你的問題的標題更改爲更具描述性的,如「如何遙控QEMU從外部流程?」。 – axxel 2013-02-25 16:35:32

+0

再次感謝,你已經幫了我很多。反正,我仍然無法發送數據的xterm,我會學習你的文檔,我嘗試過'proc.start(「sh -c \」echo password | sudo -S command \「」)',它可以適用於我,但不是最好的解決方案。 – tangbongbong 2013-02-27 12:49:32