Important: Please read the Qt Code of Conduct -

QProcess redirecting output streams produces empty files!

  • Hi there!

    I'm trying to use QProcess to make a seperate process to use WinSCP. I have got the WinSCP side working using the windows process features, however I want to learn how to use QProcess.

    The problem is, using QProcess does not output the process information in the cmd window (unlike the windows version) and I need to know what is said - so my plan is to redirect the output to a file so that it can be then read back in and output.

    Anyway, below is the code which I use to make the process, however the files it produces are completely empty! (To clarify, the startString I know works, as I use it with the windows version so syntax and so forth is correct).

    @void UploadProcess::makeQtProcess(MyGui* gui, QString dirAddr, QString device)
    m_pGui = gui;

    m_pProcess = new QProcess();

    m_pProcess->setStandardOutputFile ("C:\outputfile.txt");
    m_pProcess->setStandardErrorFile ("C:\errorfile.txt");


    QString startString = ""C:\Program Files\WinSCP\WinSCP.exe" /console /script="";
    startString += dirAddr;
    startString += "/Script.txt" /log="";
    startString += dirAddr;
    startString += "/";
    startString += device;
    startString += "/errorlog.log"";

    m_pProcess->start(startString, QIODevice::ReadWrite);

        //Here I will put code to read back the information from the file.

    if (m_pProcess->exitStatus() == QProcess::NormalExit)
    QString test = m_pProcess->errorString();

    delete m_pProcess;

    Thanks for your help in advance!


  • What happens when this executes, do you get "OK" or "Failed"? And have you tried QProcess::waitForStarted to ensure the process actually did start? In my limited experience with QProcess I've had better luck with the QProcess::start(const QString & program, const QStringList & arguments) method. You don't have to worry so much about the quotes around the program name and parameters. But I only work in Linux so I don't know if you really need those quotes.

  • I don't tested, but try with "readAllStandardOutput":

Log in to reply