2015-06-15 31 views
0

我在QProcess中啓動rsync。如果我使用QProcess::startDetached(),我的流程運行正常(在自己的終端中),但如果我使用QProcess:start()啓動它,則不會發生任何情況。問題似乎是QProcess無法從rsync讀取消息並將其寫入輸出窗口。QProcess在運行rsync時不顯示任何輸出

我已經在構造函數中連接了這個信號。

MainWindow::~MainWindow() 
{ 
    process = new QProcess(this); 

    connect(process, SIGNAL(readyReadStandardOutput()), this, SLOT(onReadyReadStandardOutput())); 
} 

按鈕點擊後來我打電話:

void MainWindow::onButton1Clicked() 
{ 
    process->start("rsync -a [email protected]:/path/ /rsync_folder"); 

    //process->start("ping 10.0.0.01"); // this works for testing and I see output but not the above. 
} 

當rsync的開始,它打印的消息,並要求password..none它是由我的QProcess中接收,但接收到ping消息。這裏可能有什麼錯誤?

上面的悲傷行也直接在Windows 7命令行上工作,但它似乎並沒有在QProcess中顯示任何進展。

更新

這是我如何顯示輸出。

void MainWindow::onReadyReadStandardOutput() 
{ 
    qDebug() << process->readAllStandardOutput(); 
} 
+0

請澄清一下,您如何知道在您的應用程序中接收到來自'ping'命令的消息?除非你通過例如'readAllStandardOutput'方法從'QProcess'中顯式讀取它們,並且將它寫入日誌或其他地方,否則它們不應該是可見的。 –

+0

@olegandriyanove我已連接插槽,並且使用'qDebug()'輸出到輸出窗口 – zar

回答

0

http://doc.qt.io/qt-5/qprocess.html#communicating-via-channels

你記得鏈接和檢查標準錯誤通道?

http://doc.qt.io/qt-5/qprocess.html#readAllStandardError

具有固定的對我來說,在過去一段QProcesses我已經開始。

我已經做到了,另一種方法是使用QProcess::startDetached();

希望有所幫助。

+0

使用startDetached(),您根本沒有得到任何輸出,是嗎? –

+0

'QProcess:startDetached()'也適用於我,但它在我自己不想要的命令行上運行。我確實調用了'readAllStandardOutput()',但它沒有看到數據。 – zar

+0

你也讀過標準錯誤嗎? – phyatt

0

我的研究顯示rsync可能表現得像scp,因此這個answer在重定向時不會生成輸出。

相關問題