Using QProcess for CLI

Using QProcess for CLI

本文关键字:CLI for QProcess Using      更新时间:2023-10-16

如何将 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 中的代码应该是什么将密码抛向命令行。任何建议都会有所帮助。谢谢

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

话虽如此,您可能希望将来考虑使用密钥而不是密码。它会更安全一些,并且对您的应用程序也很方便。

我认为您可以使用以下选项传递用户名/密码:

-l user
-pw passwd

所以你的参数应该看起来像这样:

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