c++ - 将QProcess用于 CLI

  显示原文与译文双语对照的内容
0 0

如何使用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行询问密码如何使用 QProcess,我可以通过只为scp提供一些选项,还是我的槽readOutput中的代码会将密码放到 命令行 中。 任何建议都有帮助。 谢谢

时间: 原作者:

0 0

我认为你可以将用户名/密码作为选项传递:

 
-l user
-pw passwd

 

因此,你的参数应该如下所示:


QStringList arguments;
arguments <<"-l" <<"Mrigendra" <<"-pw" <<"Password" <<
"C:/Users/polaris8/Desktop/Test1GB.zip" <<
"192.168.26.142:/home/";

0 0

看起来scp没有这样的选项,但是 pscp ( sftp客户端确实有) 。 因这里,我将编写类似于这样的内容,以基于下面的页面的来扩展你的初始参数:


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")

也就是说,将来你可能希望考虑使用密钥而不是密码。 它会更加安全,也可以为你的应用程序提供方便。

原作者:
...