C++ 对CLI使用QProcess
如何将QProcess用于命令行交互参数,我正在尝试使用提示输入密码的MG scp传输文件C++ 对CLI使用QProcess,c++,qt,qprocess,qtcore,pscp,C++,Qt,Qprocess,Qtcore,Pscp,如何将QProcess用于命令行交互参数,我正在尝试使用提示输入密码的MG scp传输文件 QString program = "c:/temp/pscp.exe"; QStringList arguments; arguments << "C:/Users/polaris8/Desktop/Test1GB.zip" << "Mrigendra@192.168.26.142:/home/"; QPointer<QProcess> myProcess; my
QString program = "c:/temp/pscp.exe";
QStringList arguments;
arguments << "C:/Users/polaris8/Desktop/Test1GB.zip" << "Mrigendra@192.168.26.142:/home/";
QPointer<QProcess> myProcess;
myProcess = new QProcess;
connect(myProcess, SIGNAL(readyReadStandardOutput()), this, SLOT(readOutput()));
myProcess->start(program , arguments);
QString program=“c:/temp/pscp.exe”;
QStringList参数;
参数似乎scp没有这样的选项,但pscp(sftp客户端有)。所以,我会写一些类似的东西来扩展你的初始论点,这个选项基于:
因此,您最终可以替换此字符串:
"C:/Users/polaris8/Desktop/Test1GB.zip"
以下是:
QStandardPaths::locate(QStandardPaths::DesktopLocation, "Test1GB.zip")
P>以上所述,您可能希望在将来考虑使用密钥而不是密码。这将更加安全,也方便您的应用程序。我认为您可以通过以下选项传递用户名/密码:
-l user
-pw passwd
所以你的论点应该是这样的:
QStringList arguments;
arguments << "-l" << "Mrigendra" << "-pw" << "Password" <<
"C:/Users/polaris8/Desktop/Test1GB.zip" <<
"192.168.26.142:/home/";
QStringList参数;
参数将用户名/密码作为参数传递给scp@LaszloPapp正确的。因此,他需要选择另一个程序进行复制。我不会弄乱密码,而是使用基于密钥的身份验证。@B:啊,嗯。pscp也是一个sftp客户机,它确实有用户名和密码选项,不像scp。@LaszloPapp…我使用的是bash。稍微详细一点会有帮助的。@B谢谢,QProcess文档更喜欢QStringList参数;arguments@ThorKhan,谢谢,但它不适用于QProcess,但在Windows命令提示符下运行良好……@user3110438:出于这个原因,我提到过。根据我的回答,您需要将“-pw password”拆分为单独的参数。严格来说,由于没有StringList
这样的类型,因此仍有一些改进的余地。排序很重要,因为您所述的顺序提示输入密码,甚至QProcess失败。.参数正确的顺序是arguments@user3110438:另外,根据我关于QStandardpath的回答和提示,请不要在代码中使用硬编码路径。我将继续查看QStandardpath。感谢您指出……Laszlo有没有办法摆脱用户名和密码,只使用pscp键?@user3110438:这有帮助吗?
-l user
-pw passwd
QStringList arguments;
arguments << "-l" << "Mrigendra" << "-pw" << "Password" <<
"C:/Users/polaris8/Desktop/Test1GB.zip" <<
"192.168.26.142:/home/";