Использование QProcess для CLI

Как я могу использовать QProcess для командной строки Интерактивные аргументы, я пытаюсь передать файл usimg scp, который запрашивает пароль

QString program = "c:/temp/pscp.exe";
QStringList arguments;
arguments << "C:/Users/polaris8/Desktop/Test1GB.zip" <<   "[email protected]:/home/";
QPointer<QProcess> myProcess;
myProcess = new QProcess;
connect(myProcess, SIGNAL(readyReadStandardOutput()), this, SLOT(readOutput()));
myProcess->start(program , arguments);

После этого Comnad Line запрашивает пароль, как его удовлетворить с помощью QProcess, могу ли я преодолеть его, задав некоторые параметры в моих аргументах только для scp, или каким должен быть код в моем слоте readOutput, который выбрасывает пароль в командную строку. Любые предложения будут полезны. Спасибо

1

Решение

Я думаю, что вы можете передать имя пользователя / пароль в качестве опции с:

-l user
-pw passwd

Так что ваши аргументы должны выглядеть так:

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

Другие решения

Кажется, что у scp нет таких опций, но у pscp (у sftp клиента есть). Итак, я бы написал что-то вроде этого, чтобы расширить ваши начальные аргументы с помощью этой опции на основе следующая страница руководства:

QString program = "c:/temp/pscp.exe";
QStringList arguments;
arguments << "-pw" << "password" << "C:/Users/polaris8/Desktop/Test1GB.zip" << "[email protected]:/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")

При этом, вы можете рассмотреть возможность использования ключей вместо пароля в будущем. Это было бы немного более безопасно, а также удобно для вашего приложения.

0

По вопросам рекламы [email protected]