Название: Записать файл и выполнить смd Отправлено: stanukih от Мая 25, 2015, 20:00 проблема следующая - код который полностью отрабатывает на linux не работает под Виндовс.
Цитировать QFile temp("cod.cpp"); temp.open(QIODevice::WriteOnly | QIODevice::Text); QTextStream out(&temp); out<<codeText->toPlainText(); temp.close(); QProcess *com=new QProcess; QString co; co="./compile.cmd"; com->start("cmd.exe",QStringList()<<co); com->waitForFinished(); отличие с линукс версией только с co="./compile.cmd"; - там co="./compile.sh"; и com->start("xterm",QStringList()<<co); суть программа по блоксхеме строит исходный код->сохраняет его->компилирует. ошибки никакие не вылазят, код сохраняется а cmd не запускается. В чем косяк? Название: Re: Записать файл и выполнить смd Отправлено: PimenS от Мая 25, 2015, 21:29 Можно попробовать через
Код: com->startDetached("cmd.exe",QStringList()<<co); если следить не надо, закрылся вызывающий процесс или нет. Название: Re: Записать файл и выполнить смd Отправлено: Bepec от Мая 26, 2015, 01:33 Ответ простой - windows это вам не linux.
Там нет такой логики вызова как ./ Вы можете убедиться сами, вызвав данную команду в консоли и получив Цитировать e:\>./2.bat "." не является внутренней или внешней командой, исполняемой программой или пакетным файлом. Потому определяйте ОС и делайте 2 ветки - для винды и для линя. PS правильный вариант будет просто Цитировать e:\>2.bat e:\>echo 123 123 PPS если непонятно, то в 2.bat имеется строка echo 123, которая выводит надпись 123 :) Название: Re: Записать файл и выполнить смd Отправлено: qate от Мая 26, 2015, 09:05 QProcess имеет два полезных метода:
QByteArray readAllStandardError() QByteArray readAllStandardOutput() вызвав их можно понять что не сработало Название: Re: Записать файл и выполнить смd Отправлено: PimenS от Мая 26, 2015, 09:16 QProcess имеет два полезных метода: QByteArray readAllStandardError() QByteArray readAllStandardOutput() вызвав их можно понять что не сработало Проблема в том, что процесс запускается. И эти выводы пустые. В диспетчере он виден. И state() показывает QProcess::Running, а вот само окно cmd не появляется. При этом при использовании startDetached(), все работает. Название: Re: Записать файл и выполнить смd Отправлено: Пантер от Мая 26, 2015, 09:18 Оно и не должно появляться.
Название: Re: Записать файл и выполнить смd Отправлено: PimenS от Мая 26, 2015, 09:55 Название: Re: Записать файл и выполнить смd Отправлено: stanukih от Мая 26, 2015, 12:20 Цитировать Потому определяйте ОС и делайте 2 ветки - для винды и для линя. так и естьЦитировать если следить не надо, закрылся вызывающий процесс или нет. если правильно понимаю то он закроеться сразу при конце функции т.к. QProcess описан локально.Цитировать PS правильный вариант будет просто пробовал Цитировать e:\>2.bat e:\>echo 123 123 PPS если непонятно, то в 2.bat имеется строка echo 123, которая выводит надпись 123 Улыбающийся co="compile.cmd"; com->start("cmd.exe",QStringList()<<co); он просто зависает, как говорит диспетчер задач cmd все же запущен. По закрытию программы cmd тоже завершается (кстати окно не появляеться). Цитировать QByteArray readAllStandardError() Ни разу этим не пользовался и не знаю как тут применить. QByteArray readAllStandardOutput() Цитировать Оно и не должно появляться. Планировалось что оно (окно cmd) будет появляться. Файл сmd состоит из g++.exe cod.cpp a.exe @ping -n 6 127.0.0.1 >nul если просто запустить то cmd то все отрабатывает без проблем. Название: Re: Записать файл и выполнить смd Отправлено: qate от Мая 26, 2015, 14:30 можно попробовать использовать ключ /c у cmd.exe
есть еще ShellExecuteA Название: Re: Записать файл и выполнить смd Отправлено: PimenS от Мая 26, 2015, 16:34 Цитировать если правильно понимаю то он закроеться сразу при конце функции т.к. QProcess описан локально. Он не закроется. Нужно будет закрывать его вручную. Название: Re: Записать файл и выполнить смd Отправлено: stanukih от Мая 26, 2015, 16:55 Цитировать если правильно понимаю то он закроеться сразу при конце функции т.к. QProcess описан локально. Попробовал так как вы предложили - работает пока. Пока буду тестировать, тему не закрою.Он не закроется. Нужно будет закрывать его вручную. |