Russian Qt Forum

Qt => Пользовательский интерфейс (GUI) => Тема начата: Примерный ученик от Октябрь 14, 2018, 14:59



Название: [решено] GUI и сеанс MS DOS или терминал Линух
Отправлено: Примерный ученик от Октябрь 14, 2018, 14:59
Есть ли возможность запустить из GUI окно командной строки, передать туда скрипт на выполнение, поуправлять им, а потом закрыть?


Название: Re: GUI и сеанс MS DOS или терминал Линух
Отправлено: PimenS от Октябрь 14, 2018, 22:53
QProcess не подходит?


Название: Re: GUI и сеанс MS DOS или терминал Линух
Отправлено: Примерный ученик от Октябрь 15, 2018, 09:50
Код:
             connect( proc, SIGNAL(finished(int,QProcess::ExitStatus)), this, SLOT(okSave()) );
            connect( proc, SIGNAL(readyReadStandardError()), this, SLOT(readError()) );
            connect( proc, SIGNAL(readyReadStandardOutput()), this, SLOT(readData()) );
            proc->setEnvironment(QProcess::systemEnvironment());
           proc->start("cmd.exe",QStringList() << "/C:" << appPath+"/db.bat");

Тут только мои сообщения, от процесса ничего, хотя он должен спросить пароль postgres
Есть только сигнал finished
Код:
09:46:06 Запуск процесса архивирования БД
09:46:06
09:46:06 "C:/Program Files/PostgreSQL/9.6/bin/pg_dump.exe" -c -U postgres -Ft -f S:/0new/SSI_admin/debug/ttt.tar ssi_p
09:46:06
09:46:06 Процесс может занять несколько минут...
09:46:09 Процесс завершен


Название: Re: GUI и сеанс MS DOS или терминал Линух
Отправлено: qate от Октябрь 15, 2018, 11:41
Если под linux, то я делал так:
QProcess::startDetached("gnome-terminal", QStringList() << "-e" << QString("%1/%2 %3").arg(QApplication::applicationDirPath(), "my_script.sh", my_param));

Под венду наверно нужно вызвать cmd.exe, но я не разбирался как конкретно.


Название: Re: GUI и сеанс MS DOS или терминал Линух
Отправлено: Примерный ученик от Октябрь 15, 2018, 12:25
Спасибо. С QProcess::startDetached окно появилось ;D
и под виндой


Название: Re: GUI и сеанс MS DOS или терминал Линух
Отправлено: GraninDm от Октябрь 18, 2018, 18:01
Насколько я помню postgres пароль забирает не из stdin.
Это для безопасности сделано.
Если нужна автоматом подставить пароль то его лучше прописать в скрипт SET PGPASSWORD = 123456789

PGPASSWORD behaves the same as the password connection parameter. Use of this environment variable is not recommended for security reasons, as some operating systems allow non-root users to see process environment variables via ps; instead consider using the ~/.pgpass file (see Section 31.14).

PGPASSFILE specifies the name of the password file to use for lookups. If not set, it defaults to ~/.pgpass (see Section 31.14).


Название: Re: GUI и сеанс MS DOS или терминал Линух
Отправлено: Примерный ученик от Октябрь 21, 2018, 21:44
Такое решение не подходит из соображений безопасности.
Сейчас процесс запрашивает пароль и работает дальше.
Появилась другая проблема: если нет ошибок, то все отрабатывает и процесс завершается, архив создается.
Но при ошибках, процесс то же завершается без всяких сообщений и создания архива.
Есть ли возможность заставить процесс ждать его принудительного завершения?


Название: Re: GUI и сеанс MS DOS или терминал Линух
Отправлено: Примерный ученик от Октябрь 22, 2018, 10:40
Код:
 proc->startDetached("cmd /K "+appPath+"/db.cmd");
параметр /K оставляет окно CMD активным до его закрытия пользователем.