如何使用QProcess进行命令行交互式参数,我正在尝试传输文件usimg 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;
myProcess = new QProcess;
connect(myProcess, SIGNAL(readyReadStandardOutput()), this, SLOT(readOutput()));
myProcess->start(program , arguments);
在此之后,commnad Line要求密码如何使用QProcess来满足它,我可以通过在我的参数中仅为scp提供一些选项来克服它,或者我的插槽中的代码readOutput是什么应该将密码抛出到命令行。任何的意见都将会有帮助。感谢
答案 0 :(得分:0)
似乎scp没有这样的选项,但是pscp(sftp客户端确实有)。所以,我会写这样的东西,根据following man page扩展你的初始参数:
QString program = "c:/temp/pscp.exe";
QStringList arguments;
arguments << "-pw" << "password" << "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);
此外,我建议您使用QStandardPaths作为与您类似的路径。有关详细信息,请参阅文档:
QStandardPaths::DesktopLocation 0 Returns the user's desktop directory.
所以,你最终可以替换这个字符串:
"C:/Users/polaris8/Desktop/Test1GB.zip"
以下内容:
QStandardPaths::locate(QStandardPaths::DesktopLocation, "Test1GB.zip")
话虽如此,您可能希望将来考虑使用密钥而不是密码。它会更安全,也方便您的应用。
答案 1 :(得分:0)
我认为您可以将用户名/密码作为选项传递:
-l user
-pw passwd
所以你的论点应该是这样的:
QStringList arguments;
arguments << "-l" << "Mrigendra" << "-pw" << "Password" <<
"C:/Users/polaris8/Desktop/Test1GB.zip" <<
"192.168.26.142:/home/";