使用QProcess进行CLI

时间:2014-01-14 07:39:50

标签: c++ qt qprocess qtcore pscp

如何使用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是什么应该将密码抛出到命令行。任何的意见都将会有帮助。感谢

2 个答案:

答案 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/";