2012-06-07 2 views
3

Мне нужна помощь в выполнении скрипта bash из пакетного скрипта (.bat), который вызывается приложением Qt внутри Windows.Для выполнения сценария bash из .bat-файла и .bat-файла вызывается приложением QT

Обзор проблемы: Мне нужно перенести файлы из Windows в Linux с помощью приложения Qt и запустить скрипт bash внутри linux для выполнения нескольких команд.

Что я сделал до сих пор: Я могу успешно перенести файлы из окон в Linux с помощью приложения Qt. Приложение Qt вызывает пакетный файл, который передает файл

пример

void Qt_intro101::on_file_upgrade_clicked() 
{ 
    QFileInfo fileInfo(ui->selected_file->text()); 
    if(!fileInfo.exists()) 
    { 
     QMessageBox::information(this, tr("Information"), 
          tr("Unable to find file for upgrading!")); 
     return; 
    } 

    // copying update 
    QString fileName = fileInfo.absoluteFilePath(); 

     //Check if cmd.exe is present in Clients system and is located at correct path 
     QFileInfo cmdFile("C:\\Windows\\system32\\cmd.exe"); 
     if(!cmdFile.exists()) 
     { 
      QMessageBox::information(this, tr("Information"), 
            tr("Failed to find the cmd.exe ... Check cmd.exe is  installed and is in C:\\Windows\\system32\\ !")); 
      return; 
     } 

    QStringList arguments ; 
    arguments << " /c" <<"c:\\temp\\upgradeTesting\\test.bat"<< fileName ; 
    QProcess *process = new QProcess(this); 
    process->start(cmdFile.absoluteFilePath(), arguments) ; 
    if(!process->waitForStarted()) 
    { 
      QMessageBox::information(this, tr("Information"), 
          tr("Failed to start the process for upgrading!")); 
      return; 
     } 


      QMessageBox::information(this, tr("Information"), 
          tr("Please wait while system is upgrading .. click Ok to exit this box")); 
     qDebug() << fileName ; 
     process->waitForFinished() ; 
     qDebug() << process->readAllStandardOutput(); 
     QMessageBox::information(this, tr("Information"), 
          tr("Upgradation is successful.. Please restart the system")) ; 
      process->deleteLater(); 

    } 

Я прописан пакетный скрипт (.bat), который выполняет команды, как

pscp -pw "lol" "%TARGET_UPDATE%" [email protected]"%TARGET_IP%":"%BASE_DIR%"/ 

Для выполнения bash через командный файл ниже - команда внутри пакетного файла

putty -pw "lol" -m test-update.sh [email protected]"%TARGET_IP%" 

я даже пытался что-то подобное

C:\\Program Files\\putty.exe -pw "lol" -m test-update.sh [email protected]"%TARGET_IP%" 

Не могли бы вы, ребята, пожалуйста, дайте мне знать, где я делаю ошибку?

спасибо и привет,
Sam

ответ

0

Вы не можете позвонить waitForStarted() дважды в перспективе. Если waitForStarted() возвращает false, вы возвращаетесь из выполнения метода. Итак, после if(! waitForStarted() ваш процесс запущен.

+0

Да Вы правы. Я забыл изменить, чтобы изменить код. Я сейчас взломаю его. но все еще не удалось запустить – samantha

+0

Проведя много часов, я понял, что мне нужно указать полное имя пути в пакетном скрипте для Qt, чтобы выполнить его.Без qt он отлично работает, но если я хочу запустить командный файл через приложение QT, то, я думаю, мне нужно дать полное имя пути для скрипта bash – samantha

0

Проведя много часов, я понял, что мне нужно указать полное имя пути в пакетном скрипте для Qt, чтобы выполнить его. Без qt он отлично работает, но если я хочу запустить пакетный файл через приложение QT, то, наверное, мне нужно дать полное имя пути для скрипта bash. пример

putty.exe -pw "lol" -m C:\\temp\\upgradingTest\\test-update.sh [email protected]"%TARGET_IP%" 

вместо

putty -pw "lol" -m test-update.sh [email protected]"%TARGET_IP%" 
2

Я думаю, что проще использовать QProcess :: Execute (QString cmdstring) Чем вы можете также передать аргументы самого

тест пакетник. cpp

QFileInfo cmdFile("C:\\Windows\\system32\\cmd.exe"); 
QProcess *process = new QProcess(this); 
process->execute(cmdFile.absoluteFilePath() + " /c helloparam.bat \"my param\" "); 
process->waitForFinished() ; 
qDebug() << process->readAllStandardOutput(); 

helloparam.bat

@echo off 
echo hello %1 

Информация: Для того, чтобы проверить это в вашей IDE сделать Shure, что вы работаете ваш application.exe из папки выпуска и имеют пакетный файл также в этой папке

Смежные вопросы