[英]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.