繁体   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