Използване на QProcess за CLI

Как мога да използвам QProcess за интерактивни аргументи на командния ред, опитвам се да прехвърля файл чрез използване на 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);

След това Commnad Line пита за парола как да го задоволя с помощта на QProcess, мога ли да го преодолея, като дам някои опции в моите аргументи само за scp, или какъв трябва да бъде кодът в моя слот readOutput, който хвърля паролата на командния ред. Всякакви предложения биха били полезни. Благодаря


person user3110438    schedule 14.01.2014    source източник
comment
подайте потребителско име/парола като аргументи на scp   -  person BЈовић    schedule 14.01.2014
comment
@LaszloPapp точно. така че трябва да избере друга програма за копиране   -  person BЈовић    schedule 14.01.2014
comment
Не бих се забърквал с пароли, но вместо това използвах удостоверяване на базата на ключ.   -  person Frank Osterfeld    schedule 14.01.2014
comment
@BЈовић: а, хм. pscp също е sftp клиент и той наистина има опции за потребителско име и парола за разлика от scp.   -  person lpapp    schedule 14.01.2014
comment
@LaszloPapp...използвам bash малко подробности биха били полезни....благодаря   -  person user3110438    schedule 14.01.2014
comment
@user3110438: вече публикува отговор преди известно време. :)   -  person lpapp    schedule 14.01.2014


Отговори (2)


Мисля, че можете да подадете потребителското име / паролата като опции с:

-l user
-pw passwd

Така че вашите аргументи трябва да изглеждат така:

QStringList arguments;
arguments << "-l" << "Mrigendra" << "-pw" << "Password" <<
             "C:/Users/polaris8/Desktop/Test1GB.zip" <<
             "192.168.26.142:/home/";
person ThorKhan    schedule 14.01.2014
comment
Fwiw, документацията на QProcess предпочита стила QStringList arguments; arguments << "-style" << "fusion";. Мисля, че в света на Qt -pw Password са два аргумента, а не един. Поне терминология и логика, но вашият код може да работи. - person lpapp; 14.01.2014
comment
@ThorKhan, благодаря, но не работи с QProcess, но работи добре в командния ред на Windows.... - person user3110438; 14.01.2014
comment
@user3110438: поради причината, която споменах. Ще трябва да разделите паролата -pw на отделни аргументи според моя отговор. - person lpapp; 14.01.2014
comment
Строго погледнато, все още има място за подобрение, тъй като няма такъв тип като StringList. - person lpapp; 14.01.2014

Изглежда, че 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")

Като се има предвид това, може да обмислите използването на ключове вместо парола в бъдеще. Би било малко по-сигурно и също така удобно за вашето приложение.

person lpapp    schedule 14.01.2014
comment
поръчката има значение, тъй като поръчката, която посочихте, изисква парола и дори QProcess се проваля..аргументи ‹‹ C:/Users/polaris8/Desktop/Test1GB.zip ‹‹ -pw ‹‹ парола ‹‹ [email protected]:/home/ ; работи добре в командния ред на Windows, но Qproces се проваля .....Правя ли Qt нещастен някъде в това изявление - person user3110438; 14.01.2014
comment
Правилният ред е аргументи ‹‹ -pw ‹‹ polaris ‹‹ C:/Users/polaris8/Desktop/ToDo.txt ‹‹ [email protected]:/home/;... Работи Благодаря Laszlo и @ThorKhan - person user3110438; 14.01.2014
comment
@user3110438: Освен това, според моя отговор и намек за QStandardPaths, моля, не използвайте твърдо кодирани пътища във вашия код. - person lpapp; 14.01.2014
comment
ще продължи да разглежда QStandardPaths.. Благодаря, че го посочихте... Ласло има ли начин да се отървете от потребителското име и паролите и просто да използвате ключове с помощта на pscp? - person user3110438; 14.01.2014
comment
@user3110438: dafis.ucdavis.edu/install/sftp/PuttyPSCPKey.cfm това помага ли - person lpapp; 14.01.2014