簡體   English   中英

無法使用 QProcess 執行 scp

[英]Cannot execute scp with QProcess

我正在嘗試從/向遠程主機獲取修改發送文件。 是 Windows 10,順便說一句。

我減少了代碼以使其更容易:

#include <QCoreApplication>
#include <QProcess>

bool getFile(QStringList &logTextList)
{
    QProcess scp;

    scp.start( "scp", QStringList() );
    if( scp.waitForStarted(1000) )
    {
        if( scp.waitForFinished(10000) == true )
        {
            if( scp.exitCode() == 0 )
            {
                logTextList.append(scp.readAllStandardError());
                return true;
            }
        }
        else
            logTextList.append("Not finished");
    }
    else
        logTextList.append( "Not Started" );
    logTextList.append( scp.readAllStandardError() );
    logTextList.append( scp.readAllStandardOutput() );
    logTextList.append( QString("Exitcode = %1\n").arg(scp.exitCode()) );
    return false;
}

int main(int argc, char *argv[])
{
    QCoreApplication a(argc, argv);
    QStringList logTextList;

    getFile(logTextList);

    return a.exec();
}

QProcess 從不以“scp”或“dir”開頭(記住,它是 windows 10 host),但可以使用“cmd”或“ping”命令。 還嘗試執行“cmd”並寫入標准輸入“scp”。 但是命令提示符報告“scp”是未知命令。

[編輯] 剛剛發現“dir”不是外部可執行文件。 所以,需要在“cmd.exe”中執行。 並且有效。 但是“scp”仍然沒有。

有什么線索嗎?

提前致謝。

當您按名稱生成進程時,它會在PATH環境變量的所有路徑中進行搜索,如果不存在,它將無法工作。

您可以通過在啟動應用程序之前臨時或永久地將 scp 路徑添加到PATH來修復它。

或者您可以使用完整路徑生成進程:

QString command = "scp";
#ifdef Q_OS_WIN
command = "C:\\Program Files\\Git\\usr\\bin\\scp.exe";
#endif
scp.start(command, {});

或者您可以通過 shell 生成 scp 並修改環境:

QProcess scp;
QProcessEnvironment env = QProcessEnvironment::systemEnvironment();
QString PATH = env.value("PATH") + ";C:\\msys64\\usr\\bin;C:\\Program Files\\Git\\usr\\bin";
env.insert("PATH", PATH);
scp.setProcessEnvironment(env);
scp.start("cmd",{"/c","scp"});

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM