Класс QProcess
Класс QProcess используется для запуска внешних программ и для общения с ними. Подробнее...
| Заголовок: | #include <QProcess> |
| qmake: | QT += core |
| Наследует: | QIODevice |
Примечание: Все функции в этом классе являются повторно входящими.
Типы общедоступные
| Структура | CreateProcessArguments |
| typedef | CreateProcessArgumentModifier |
| Перечисление | ExitStatus { NormalExit, CrashExit } |
| Перечисление | InputChannelMode { ManagedInputChannel, ForwardedInputChannel } |
| Перечисление | ProcessChannel { StandardOutput, StandardError } |
| Перечисление | ProcessChannelMode { SeparateChannels, MergedChannels, ForwardedChannels, ForwardedErrorChannel, ForwardedOutputChannel } |
| Перечисление | ProcessError { FailedToStart, Crashed, Timedout, WriteError, ReadError, UnknownError } |
| Перечисление | ProcessState { NotRunning, Starting, Running } |
Общедоступные функции
| QProcess(QObject *parent = nullptr) | |
| виртуальный | ~QProcess() |
| QStringList | arguments() const |
| void | closeReadChannel(QProcess::ProcessChannel channel) |
| void | closeWriteChannel() |
| QProcess::CreateProcessArgumentModifier | createProcessArgumentsModifier() const |
| QProcess::ProcessError | error() const |
| int | exitCode() const |
| QProcess::ExitStatus | exitStatus() const |
| QProcess::InputChannelMode | inputChannelMode() const |
| QString | nativeArguments() const |
| QProcess::ProcessChannelMode | processChannelMode() const |
| QProcessEnvironment | processEnvironment() const |
| qint64 | processId() const |
| QString | program() const |
| QByteArray | readAllStandardError() |
| QByteArray | readAllStandardOutput() |
| QProcess::ProcessChannel | readChannel() const |
| void | setArguments(const QStringList &arguments) |
| void | setCreateProcessArgumentsModifier(QProcess::CreateProcessArgumentModifier modifier) |
| void | setInputChannelMode(QProcess::InputChannelMode mode) |
| void | setNativeArguments(const QString &arguments) |
| void | setProcessChannelMode(QProcess::ProcessChannelMode mode) |
| void | setProcessEnvironment(const QProcessEnvironment &environment) |
| void | setProgram(const QString &program) |
| void | setReadChannel(QProcess::ProcessChannel channel) |
| void | setStandardErrorFile(const QString &fileName, QIODevice::OpenMode mode = Truncate) |
| void | setStandardInputFile(const QString &fileName) |
| void | setStandardOutputFile(const QString &fileName, QIODevice::OpenMode mode = Truncate) |
| void | setStandardOutputProcess(QProcess *destination) |
| void | setWorkingDirectory(const QString &dir) |
| void | start(const QString &program, const QStringList &arguments, QIODevice::OpenMode mode = ReadWrite) |
| void | start(QIODevice::OpenMode mode = ReadWrite) |
| bool | startDetached(qint64 *pid = nullptr) |
| QProcess::ProcessState | state() const |
| bool | waitForFinished(int msecs = 30000) |
| bool | waitForStarted(int msecs = 30000) |
| QString | workingDirectory() const |
Переопределенные общедоступные функции
| виртуальный bool | atEnd() const override |
| виртуальный qint64 | bytesAvailable() const override |
| виртуальный qint64 | bytesToWrite() const override |
| виртуальный bool | canReadLine() const override |
| виртуальный void | close() override |
| виртуальный bool | isSequential() const override |
| виртуальный bool | open(QIODevice::OpenMode mode = ReadWrite) override |
| виртуальный bool | waitForBytesWritten(int msecs = 30000) override |
| виртуальный bool | waitForReadyRead(int msecs = 30000) override |
Открытые слоты
| void | kill() |
| void | terminate() |
Сигналы
| void | errorOccurred(QProcess::ProcessError error) |
| void | finished(int exitCode, QProcess::ExitStatus exitStatus) |
| void | readyReadStandardError() |
| void | readyReadStandardOutput() |
| void | started() |
| void | stateChanged(QProcess::ProcessState newState) |
Статические открытые члены
| int | execute(const QString &program, const QStringList &arguments) |
| QString | nullDevice() |
| QStringList | splitCommand(QStringView command) |
| bool | startDetached(const QString &program, const QStringList &arguments, const QString &workingDirectory = QString(), qint64 *pid = nullptr) |
| QStringList | systemEnvironment() |
Защищенные функции
| void | setProcessState(QProcess::ProcessState state) |
| виртуальный void | setupChildProcess() |
Переопределенные защищенные функции
| виртуальный qint64 | readData(char *data, qint64 maxlen) override |
| виртуальный qint64 | writeData(const char *data, qint64 len) override |
Связанные внешние члены
| typedef | Q_PID |
Макросы
| QT_NO_PROCESS_COMBINED_ARGUMENT_START |
Подробное описание
Запуск процесса
Чтобы запустить процесс, передайте имя и аргументы командной строки программы, которую вы хотите запустить, в качестве аргументов start(). Аргументы предоставляются как отдельные строки в QStringList.
В качестве альтернативы вы можете задать программу для выполнения с помощью setProgram() и setArguments(), а затем вызвать start() или open().
Например, следующий фрагмент кода запускает пример аналоговых часов в стиле Fusion на платформах X11, передавая строки, содержащие "-style" и "fusion", как два элемента в списке аргументов:
QObject *parent;
...
QString program = "./path/to/Qt/examples/widgets/analogclock";
QStringList arguments;
arguments << "-style" << "fusion";
QProcess *myProcess = new QProcess(parent);
myProcess->start(program, arguments); Затем QProcess переходит в состояние Starting, а когда программа запущена, QProcess переходит в состояние Running и излучает started().
QProcess позволяет обрабатывать процесс как последовательное устройство ввода-вывода. Вы можете записывать и считывать данные из процесса так же, как вы бы обращались к сетевому соединению с помощью QTcpSocket. Затем вы можете записать данные в стандартный ввод процесса, вызвав write(), и прочитать стандартный вывод, вызвав read(), readLine() и getChar(). Поскольку он наследуется от QIODevice, QProcess также может использоваться в качестве источника входных данных для QXmlReader или для генерации данных для загрузки с помощью QNetworkAccessManager.
Когда процесс завершается, QProcess снова возвращается в состояние NotRunning (начальное состояние) и излучает finished().
Сигнал finished() предоставляет код завершения и состояние завершения процесса в качестве аргументов, а также вы можете вызвать exitCode(), чтобы получить код завершения последнего завершенного процесса, и exitStatus(), чтобы получить его состояние завершения. Если в какой-либо момент времени произойдет ошибка, QProcess излучит сигнал errorOccurred(). Вы также можете вызвать error(), чтобы найти тип произошедшей ошибки, и state(), чтобы найти текущее состояние процесса.
Примечание: QProcess не поддерживается на VxWorks, iOS, tvOS, watchOS или Universal Windows Platform.
Обмен данными через каналы
Процессы имеют два предопределенных канала вывода: канал стандартного вывода (stdout) предоставляет обычный вывод консоли, а канал стандартной ошибки (stderr) обычно предоставляет ошибки, которые печатает процесс. Эти каналы представляют собой два отдельных потока данных. Вы можете переключаться между ними, вызывая setReadChannel(). QProcess излучает readyRead(), когда данные доступны в текущем канале чтения. Он также излучает readyReadStandardOutput(), когда доступны новые стандартные данные вывода, и когда доступны новые стандартные данные ошибки, излучается readyReadStandardError(). Вместо вызова read(), readLine() или getChar(), вы можете явно прочитать все данные из любого из двух каналов, вызвав readAllStandardOutput() или readAllStandardError().
Терминология каналов может быть вводящей в заблуждение. Имейте в виду, что каналы вывода процесса соответствуют каналам чтения QProcess, тогда как каналы ввода процесса соответствуют каналам записи QProcess. Это связано с тем, что то, что мы читаем с помощью QProcess, является выводом процесса, а то, что мы записываем, становится вводом процесса.
QProcess может объединить два канала вывода, так что данные стандартного вывода и стандартной ошибки, полученные от работающего процесса, оба используют канал стандартного вывода. Вызовите setProcessChannelMode() с MergedChannels перед запуском процесса, чтобы активировать эту функцию. Вы также можете направить вывод работающего процесса в вызывающий, основной процесс, передав ForwardedChannels в качестве аргумента. Также возможно направить только один из каналов вывода - обычно используется ForwardedErrorChannel, но также существует ForwardedOutputChannel. Имейте в виду, что использование перенаправления каналов обычно является плохой идеей в приложениях графического интерфейса - вы должны визуализировать ошибки графически вместо этого.
Некоторым процессам для работы необходимы специальные параметры среды. Вы можете установить переменные среды для вашего процесса, вызвав setProcessEnvironment(). Чтобы установить рабочую директорию, вызовите setWorkingDirectory(). По умолчанию процессы запускаются в текущей рабочей директории вызывающего процесса.
Позиционирование и порядок отображения окон приложений GUI, запущенных с помощью QProcess, управляются подлежащей системой окон. Для приложений Qt 5 позиционирование можно указать с помощью параметра командной строки -qwindowgeometry; приложения X11 обычно принимают параметр командной строки -geometry.
Примечание: В QNX установка рабочей директории может привести к временному зависанию всех потоков приложения, за исключением потока вызова QProcess, из-за ограничения операционной системы.
API синхронного процесса
QProcess предоставляет набор функций, позволяющих использовать его без цикла событий, приостанавливая вызывающий поток до испускания определенных сигналов:
- waitForStarted() приостанавливает выполнение, пока процесс не запустится.
- waitForReadyRead() приостанавливает выполнение, пока новые данные не станут доступны для чтения в текущем канале чтения.
- waitForBytesWritten() приостанавливает выполнение, пока один пакет данных не будет записан в процесс.
- waitForFinished() приостанавливает выполнение, пока процесс не завершится.
Вызов этих функций из основного потока (потока, вызывающего QApplication::exec()) может привести к зависанию пользовательского интерфейса.
В следующем примере запускается gzip для сжатия строки "Qt rocks!", без цикла событий:
QProcess gzip;
gzip.start("gzip", QStringList() << "-c");
if (!gzip.waitForStarted())
return false;
gzip.write("Qt rocks!");
gzip.closeWriteChannel();
if (!gzip.waitForFinished())
return false;
QByteArray result = gzip.readAll(); Примечания для пользователей Windows
Некоторые команды Windows (например, dir) не предоставляются отдельными приложениями, а интерпретатором команд. Если вы попытаетесь использовать QProcess для прямого выполнения этих команд, это не сработает. Одним из возможных решений является запуск самого интерпретатора команд (cmd.exe на некоторых системах Windows) и запросить у интерпретатора выполнение необходимой команды.
См. также QBuffer, QFile и QTcpSocket.
Документация по типам членов
typedef QProcess::CreateProcessArgumentModifier
Примечание: Этот typedef доступен только на настольных системах Windows.
В Windows QProcess использует функцию Win32 API CreateProcess для запуска дочерних процессов. Хотя QProcess предоставляет удобный способ запуска процессов без необходимости учитывать платформенные детали, в некоторых случаях желательно указать параметры, передаваемые в функцию CreateProcess. Это делается путем определения функции CreateProcessArgumentModifier и передачи ее в функцию setCreateProcessArgumentsModifier.
Функция CreateProcessArgumentModifier принимает один параметр: указатель на структуру CreateProcessArguments. Члены этой структуры будут переданы функции CreateProcess после вызова функции CreateProcessArgumentModifier.
Следующий пример демонстрирует, как передавать пользовательские флаги функции CreateProcess. При запуске консольного процесса B из консольного процесса A, QProcess по умолчанию использует окно консоли процесса A для процесса B. В этом примере для дочернего процесса B создается новое окно консоли с пользовательской цветовой схемой.
QProcess process;
process.setCreateProcessArgumentsModifier([] (QProcess::CreateProcessArguments *args)
{
args->flags |= CREATE_NEW_CONSOLE;
args->startupInfo->dwFlags &= ~STARTF_USESTDHANDLES;
args->startupInfo->dwFlags |= STARTF_USEFILLATTRIBUTE;
args->startupInfo->dwFillAttribute = BACKGROUND_BLUE | FOREGROUND_RED
| FOREGROUND_INTENSITY;
});
process.start("C:\\Windows\\System32\\cmd.exe", QStringList() << "/k" << "title" << "The Child Process"); См. также QProcess::CreateProcessArguments и setCreateProcessArgumentsModifier().
enum QProcess::ExitStatus
Этот перечисление описывает различные статусы завершения QProcess.
| Константа | Значение | Описание |
|---|---|---|
QProcess::NormalExit |
0 |
Процесс завершился нормально. |
QProcess::CrashExit |
1 |
Процесс завершился аварийно. |
См. также exitStatus().
enum QProcess::InputChannelMode
Это перечисление описывает режимы канала ввода процесса QProcess. Передайте одно из этих значений в setInputChannelMode() для установки текущего режима канала записи.
| Константа | Значение | Описание |
|---|---|---|
QProcess::ManagedInputChannel |
0 |
QProcess управляет вводом работающего процесса. Это режим канала ввода по умолчанию для QProcess. |
QProcess::ForwardedInputChannel |
1 |
QProcess передает ввод основного процесса в работающий процесс. Дочерний процесс считывает стандартный ввод из того же источника, что и основной процесс. Обратите внимание, что основной процесс не должен пытаться прочитать свой стандартный ввод, пока дочерний процесс работает. |
Это перечисление было введено или изменено в Qt 5.2.
См. также setInputChannelMode().
enum QProcess::ProcessChannel
Это перечисление описывает каналы процесса, используемые работающим процессом. Передайте одно из этих значений в setReadChannel() для установки текущего канала чтения QProcess.
| Константа | Значение | Описание |
|---|---|---|
QProcess::StandardOutput |
0 |
Стандартный вывод (stdout) работающего процесса. |
QProcess::StandardError |
1 |
Стандартная ошибка (stderr) работающего процесса. |
См. также setReadChannel().
enum QProcess::ProcessChannelMode
Это перечисление описывает режимы канала вывода процесса QProcess. Передайте одно из этих значений в setProcessChannelMode() для установки текущего режима канала чтения.
| Константа | Значение | Описание |
|---|---|---|
QProcess::SeparateChannels |
0 |
QProcess управляет выводом работающего процесса, сохраняя данные стандартного вывода и стандартной ошибки в отдельных внутренних буферах. Вы можете выбрать текущий канал чтения QProcess с помощью вызова setReadChannel(). Это режим канала по умолчанию для QProcess. |
QProcess::MergedChannels |
1 |
QProcess объединяет вывод работающего процесса в канал стандартного вывода (stdout). Канал стандартной ошибки (stderr) не получит никаких данных. Данные стандартного вывода и стандартной ошибки работающего процесса переплетены. |
QProcess::ForwardedChannels |
2 |
QProcess передает вывод работающего процесса в основной процесс. Все, что дочерний процесс записывает в стандартный вывод и стандартную ошибку, запишется в стандартный вывод и стандартную ошибку основного процесса. |
QProcess::ForwardedErrorChannel |
4 |
QProcess управляет стандартным выводом работающего процесса, но передает стандартную ошибку в основной процесс. Это соответствует типичному использованию командных утилит в качестве фильтров, где стандартный вывод перенаправляется в другой процесс или файл, а стандартная ошибка выводится на консоль для диагностики. (Это значение было введено в Qt 5.2.) |
QProcess::ForwardedOutputChannel |
3 |
Дополнительный к ForwardedErrorChannel. (Это значение было введено в Qt 5.2.) |
Примечание: Windows намеренно подавляет вывод из приложений GUI только в унаследованных консолях. Это не относится к выводу, перенаправленному в файлы или каналы. Чтобы перенаправить вывод приложений GUI только в консоли, необходимо использовать SeparateChannels и выполнить перенаправление самостоятельно, считывая вывод и записывая его в соответствующие каналы вывода.
См. также setProcessChannelMode().
enum QProcess::ProcessError
Это перечисление описывает различные типы ошибок, которые сообщаются QProcess.
| Константа | Значение | Описание |
|---|---|---|
QProcess::FailedToStart |
0 |
Процесс не удалось запустить. Или запрашиваемая программа отсутствует, или у вас недостаточно прав для запуска программы. |
QProcess::Crashed |
1 |
Процесс завершился аварийно после успешного запуска. |
QProcess::Timedout |
2 |
Функция waitFor...() истекла по времени. Состояние QProcess не изменилось, и вы можете снова вызвать waitFor...(). |
QProcess::WriteError |
4 |
При попытке записи в процесс произошла ошибка. Например, процесс может не запускаться или закрыть свой канал ввода. |
QProcess::ReadError |
3 |
При попытке чтения из процесса произошла ошибка. Например, процесс может не запускаться. |
QProcess::UnknownError |
5 |
Произошла неизвестная ошибка. Это значение возвращается по умолчанию функцией error(). |
См. также error().
enum QProcess::ProcessState
Этот перечисление описывает различные состояния QProcess.
| Постоянная | Значение | Описание |
|---|---|---|
QProcess::NotRunning |
0 |
Процесс не запущен. |
QProcess::Starting |
1 |
Процесс запускается, но программа еще не вызвана. |
QProcess::Running |
2 |
Процесс запущен и готов к чтению и записи. |
См. также state().
Документация функций-членов
QProcess::QProcess(QObject *parent = nullptr)
Создает объект QProcess с заданным parent.
[signal] void QProcess::errorOccurred(QProcess::ProcessError error)
Этот сигнал испускается, когда происходит ошибка с процессом. Указанная error описывает тип произошедшей ошибки.
Эта функция была добавлена в Qt 5.6.
[signal] void QProcess::finished(int exitCode, QProcess::ExitStatus exitStatus)
Этот сигнал испускается, когда процесс завершается. exitCode — код завершения процесса (действителен только для нормального завершения), а exitStatus — статус завершения. После завершения процесса буферы в QProcess остаются нетронутыми. Вы по-прежнему можете прочитать любые данные, которые процесс мог записать перед завершением.
Примечание: Сигнал finished перегружен в этом классе. Для подключения к этому сигналу с использованием синтаксиса указателя на функцию Qt предоставляет удобную вспомогательную функцию для получения указателя на функцию, как показано в этом примере:
connect(process, QOverload<int, QProcess::ExitStatus>::of(&QProcess::finished),
[=](int exitCode, QProcess::ExitStatus exitStatus){ /* ... */ }); См. также exitStatus().
[slot] void QProcess::kill()
Убивает текущий процесс, заставляя его немедленно выйти.
В Windows kill() использует TerminateProcess, а в Unix и macOS — сигнал SIGKILL.
См. также terminate().
[signal] void QProcess::readyReadStandardError()
Этот сигнал испускается, когда процесс предоставил новые данные через канал стандартной ошибки (stderr). Он испускается независимо от текущего канала чтения.
Примечание: Это частный сигнал. Он может использоваться в подключениях сигналов, но не может испускаться пользователем.
См. также readAllStandardError() и readChannel().
[signal] void QProcess::readyReadStandardOutput()
Этот сигнал испускается, когда процесс предоставил новые данные через канал стандартного вывода (stdout). Он испускается независимо от текущего канала чтения.
Примечание: Это частный сигнал. Он может использоваться в подключениях сигналов, но не может испускаться пользователем.
См. также readAllStandardOutput() и readChannel().
[signal] void QProcess::started()
Этот сигнал испускается QProcess, когда процесс запущен, и state() возвращает Running.
Примечание: Это частный сигнал. Он может использоваться в подключениях сигналов, но не может испускаться пользователем.
[signal] void QProcess::stateChanged(QProcess::ProcessState newState)
Этот сигнал испускается всякий раз, когда изменяется состояние QProcess. Аргумент newState — состояние, в которое перешел QProcess.
Примечание: Это частный сигнал. Он может использоваться в подключениях сигналов, но не может испускаться пользователем.
[slot] void QProcess::terminate()
Попытка завершить процесс.
Процесс может не выйти в результате вызова этой функции (ему предоставляется возможность запросить у пользователя любые несохраненные файлы и т. д.).
В Windows terminate() отправляет сообщение WM_CLOSE во все окна верхнего уровня процесса, а затем в сам главный поток процесса. В Unix и macOS отправляется сигнал SIGTERM.
Приложения консоли в Windows, которые не запускают цикл событий или цикл событий которых не обрабатывает сообщение WM_CLOSE, могут быть завершены только путем вызова kill().
См. также kill().
[virtual] QProcess::~QProcess()
Удаляет объект QProcess, то есть убивает процесс.
Обратите внимание, что эта функция не вернется, пока процесс не будет завершен.
QStringList QProcess::arguments() const
Возвращает аргументы командной строки, с которыми процесс был последний раз запущен.
Эта функция была добавлена в Qt 5.0.
См. также setArguments() и start().
[override virtual] bool QProcess::atEnd() const
Переопределяет: QIODevice::atEnd() const.
Возвращает true, если процесс не запущен и больше нет доступных данных для чтения; в противном случае возвращает false.
[override virtual] qint64 QProcess::bytesAvailable() const
Переопределяет: QIODevice::bytesAvailable() const.
[override virtual] qint64 QProcess::bytesToWrite() const
Переопределяет: QIODevice::bytesToWrite() const.
[override virtual] bool QProcess::canReadLine() const
Переопределяет: QIODevice::canReadLine() const.
Эта функция работает с текущим каналом чтения.
См. также readChannel() и setReadChannel().
[override virtual] void QProcess::close()
Переопределяет: QIODevice::close().
Закрывает все каналы связи с процессом и убивает его. После вызова этой функции QProcess больше не будет испускать readyRead(), и данные больше нельзя читать или записывать.
void QProcess::closeReadChannel(QProcess::ProcessChannel channel)
Закрывает канал чтения channel. После вызова этой функции QProcess больше не будет получать данные по каналу. Любые данные, которые уже были получены, по-прежнему доступны для чтения.
Вызовите эту функцию для экономии памяти, если вас не интересует вывод процесса.
См. также closeWriteChannel() и setReadChannel().
void QProcess::closeWriteChannel()
Планирует закрытие канала записи QProcess. Канал закроется после записи всех данных в процесс. После вызова этой функции любые попытки записи в процесс завершатся ошибкой.
Закрытие канала записи необходимо для программ, которые считывают входные данные до закрытия канала. Например, программа "more" используется для отображения текстовых данных в консоли в Unix и Windows. Но она не отобразит текстовые данные до тех пор, пока канал записи QProcess не будет закрыт. Пример:
QProcess more;
more.start("more");
more.write("Text to display");
more.closeWriteChannel();
// QProcess will emit readyRead() once "more" starts printing Канал записи неявно открывается при вызове start().
См. также closeReadChannel().
QProcess::CreateProcessArgumentModifier QProcess::createProcessArgumentsModifier() const
Возвращает ранее заданную функцию CreateProcess модификатора.
Примечание: Эта функция доступна только на платформе Windows.
Эта функция была добавлена в Qt 5.7.
См. также setCreateProcessArgumentsModifier() и QProcess::CreateProcessArgumentModifier.
QProcess::ProcessError QProcess::error() const
Возвращает тип последней произошедшей ошибки.
См. также state().
[static] int QProcess::execute(const QString &program, const QStringList &arguments)
Запускает программу program с аргументами arguments в новом процессе, ожидает его завершения и возвращает код завершения процесса. Любые данные, которые новый процесс записывает в консоль, передаются обратно вызывающему процессу.
Среда и рабочая директория наследуются от вызывающего процесса.
Обработка аргументов идентична соответствующему перегрузке start().
Если процесс нельзя запустить, возвращается -2. Если процесс завершился аварийно, возвращается -1. В противном случае возвращается код завершения процесса.
См. также start().
int QProcess::exitCode() const
Возвращает код завершения последнего завершенного процесса.
Это значение недействительно, если exitStatus() не возвращает NormalExit.
QProcess::ExitStatus QProcess::exitStatus() const
Возвращает состояние завершения последнего завершенного процесса.
В Windows, если процесс был завершен с помощью TerminateProcess() из другого приложения, эта функция по-прежнему вернет NormalExit, если только код завершения не меньше 0.
Эта функция была введена в Qt 4.1.
QProcess::InputChannelMode QProcess::inputChannelMode() const
Возвращает режим канала стандартного ввода процесса QProcess.
Эта функция была введена в Qt 5.2.
См. также setInputChannelMode() и InputChannelMode.
[override virtual] bool QProcess::isSequential() const
Реализует: QIODevice::isSequential() const.
QString QProcess::nativeArguments() const
Возвращает дополнительные аргументы командной строки для программы в нативном формате.
Примечание: Эта функция доступна только на платформе Windows.
Эта функция была введена в Qt 4.7.
См. также setNativeArguments().
[static] QString QProcess::nullDevice()
Пустой файл (null device) операционной системы.
Возвращаемый путь файла использует нативные разделители директорий.
Эта функция была введена в Qt 5.2.
См. также QProcess::setStandardInputFile(), QProcess::setStandardOutputFile() и QProcess::setStandardErrorFile().
[override virtual] bool QProcess::open(QIODevice::OpenMode mode = ReadWrite)
Реализует: QIODevice::open(QIODevice::OpenMode mode).
Запускает программу, заданную setProgram(), с аргументами, заданными setArguments(). Режим OpenMode устанавливается в mode.
Этот метод является псевдонимом для start() и существует только для полной реализации интерфейса, определенного QIODevice.
Возвращает true, если программа была запущена.
См. также start(), setProgram() и setArguments().
QProcess::ProcessChannelMode QProcess::processChannelMode() const
Возвращает режим канала стандартного вывода и стандартной ошибки процесса QProcess.
Эта функция была введена в Qt 4.2.
См. также setProcessChannelMode(), ProcessChannelMode и setReadChannel().
QProcessEnvironment QProcess::processEnvironment() const
Возвращает окружение, которое QProcess передаст своему дочернему процессу, или пустой объект, если окружение не было установлено с помощью setEnvironment() или setProcessEnvironment(). Если окружение не было установлено, будет использовано окружение вызывающего процесса.
Эта функция была введена в Qt 4.6.
См. также setProcessEnvironment(), setEnvironment() и QProcessEnvironment::isEmpty().
qint64 QProcess::processId() const
Возвращает идентификатор нативного процесса для работающего процесса, если доступен. Если процесс в данный момент не запущен, возвращается 0.
Эта функция была введена в Qt 5.3.
QString QProcess::program() const
Возвращает программу, с которой был запущен последний процесс.
Эта функция была введена в Qt 5.0.
См. также setProgram() и start().
QByteArray QProcess::readAllStandardError()
Независимо от текущего канала чтения, эта функция возвращает все доступные данные из стандартного потока ошибок процесса в виде QByteArray.
См. также readyReadStandardError(), readAllStandardOutput(), readChannel() и setReadChannel().
QByteArray QProcess::readAllStandardOutput()
Независимо от текущего канала чтения, эта функция возвращает все доступные данные из стандартного потока вывода процесса в виде QByteArray.
См. также readyReadStandardOutput(), readAllStandardError(), readChannel() и setReadChannel().
QProcess::ProcessChannel QProcess::readChannel() const
Возвращает текущий канал чтения процесса QProcess.
См. также setReadChannel().
[override virtual protected] qint64 QProcess::readData(char *data, qint64 maxlen)
Реализует: QIODevice::readData(char *data, qint64 maxSize).
void QProcess::setArguments(const QStringList &arguments)
Устанавливает arguments, которые будут переданы вызываемой программе при запуске процесса. Эта функция должна быть вызвана перед start().
Эта функция была введена в Qt 5.1.
См. также start(), setProgram() и arguments().
void QProcess::setCreateProcessArgumentsModifier(QProcess::CreateProcessArgumentModifier modifier)
Устанавливает modifier для вызова API CreateProcess Win32. Передайте QProcess::CreateProcessArgumentModifier(), чтобы удалить ранее установленный.
Примечание: Эта функция доступна только на платформе Windows и требует C++11.
Эта функция была введена в Qt 5.7.
См. также createProcessArgumentsModifier() и QProcess::CreateProcessArgumentModifier.
void QProcess::setInputChannelMode(QProcess::InputChannelMode mode)
Устанавливает режим канала стандартного ввода процесса QProcess в указанный режим mode. Этот режим будет использован в следующий раз, когда будет вызван start().
Эта функция была введена в Qt 5.2.
См. также inputChannelMode() и InputChannelMode.
void QProcess::setNativeArguments(const QString &arguments)
Это перегруженная функция.
Устанавливает дополнительные нативные аргументы командной строки arguments для программы.
В операционных системах, где системный API для передачи аргументов командной строки дочернему процессу в нативном формате использует одну строку, можно представить командные строки, которые не могут быть переданы через основанный на списке API QProcess. В таких случаях эта функция должна использоваться для установки строки, которая дополняется строкой, составленной из обычного списка аргументов, с разделителем пробела.
Примечание: Эта функция доступна только на платформе Windows.
Эта функция была введена в Qt 4.7.
См. также nativeArguments().
void QProcess::setProcessChannelMode(QProcess::ProcessChannelMode mode)
Устанавливает режим канала стандартного вывода и стандартной ошибки процесса QProcess в указанный режим mode. Этот режим будет использован в следующий раз, когда будет вызван start(). Например:
QProcess builder;
builder.setProcessChannelMode(QProcess::MergedChannels);
builder.start("make", QStringList() << "-j2");
if (!builder.waitForFinished())
qDebug() << "Make failed:" << builder.errorString();
else
qDebug() << "Make output:" << builder.readAll(); Эта функция была введена в Qt 4.2.
См. также processChannelMode(), ProcessChannelMode и setReadChannel().
void QProcess::setProcessEnvironment(const QProcessEnvironment &environment)
Устанавливает environment, которое QProcess передаст дочернему процессу.
Например, следующий код добавляет переменную среды TMPDIR:
QProcess process;
QProcessEnvironment env = QProcessEnvironment::systemEnvironment();
env.insert("TMPDIR", "C:\\MyApp\\temp"); // Add an environment variable
process.setProcessEnvironment(env);
process.start("myapp"); Обратите внимание, что на Windows имена переменных среды не чувствительны к регистру.
Эта функция была добавлена в Qt 4.6.
См. также processEnvironment(), QProcessEnvironment::systemEnvironment() и setEnvironment().
[protected] void QProcess::setProcessState(QProcess::ProcessState state)
Устанавливает текущее состояние QProcess на указанное значение state.
См. также state().
void QProcess::setProgram(const QString &program)
Устанавливает program для использования при запуске процесса. Эта функция должна быть вызвана перед start().
Эта функция была добавлена в Qt 5.1.
См. также start(), setArguments() и program().
void QProcess::setReadChannel(QProcess::ProcessChannel channel)
Устанавливает текущий канал чтения QProcess на заданный channel. Текущий входной канал используется функциями read(), readAll(), readLine() и getChar(). Он также определяет, какой канал вызывает у QProcess излучение сигнала readyRead().
См. также readChannel().
void QProcess::setStandardErrorFile(const QString &fileName, QIODevice::OpenMode mode = Truncate)
Перенаправляет стандартный вывод ошибок процесса в файл fileName. При включенном перенаправлении, канал чтения стандартного вывода ошибок закрывается: чтение из него с помощью read() всегда будет завершаться ошибкой, как и readAllStandardError(). Файл будет добавлен в конец, если mode равен Append, в противном случае он будет обнулен.
См. setStandardOutputFile() для получения дополнительной информации о том, как открывается файл.
Примечание: если setProcessChannelMode() был вызван со значением QProcess::MergedChannels, эта функция не имеет эффекта.
Эта функция была добавлена в Qt 4.2.
См. также setStandardInputFile(), setStandardOutputFile() и setStandardOutputProcess().
void QProcess::setStandardInputFile(const QString &fileName)
Перенаправляет стандартный ввод процесса в файл, указанный fileName. Когда перенаправление ввода активна, объект QProcess будет в режиме только для чтения (вызов write() приведет к ошибке).
Чтобы процесс сразу же прочитал конец файла, передайте nullDevice() сюда. Это более чисто, чем использование closeWriteChannel() до записи любых данных, потому что это можно настроить до запуска процесса.
Если файл fileName не существует в момент вызова start() или он недоступен для чтения, запуск процесса завершится ошибкой.
Вызов setStandardInputFile() после запуска процесса не имеет эффекта.
Эта функция была добавлена в Qt 4.2.
См. также setStandardOutputFile(), setStandardErrorFile() и setStandardOutputProcess().
void QProcess::setStandardOutputFile(const QString &fileName, QIODevice::OpenMode mode = Truncate)
Перенаправляет стандартный вывод процесса в файл fileName. При включенном перенаправлении канал чтения стандартного вывода закрывается: чтение из него с помощью read() всегда будет завершаться ошибкой, как и readAllStandardOutput().
Чтобы отбросить весь стандартный вывод процесса, передайте nullDevice() сюда. Это более эффективно, чем просто никогда не читать стандартный вывод, так как никакие буферы QProcess не заполняются.
Если файл fileName не существует в момент вызова start(), он будет создан. Если его нельзя создать, запуск завершится ошибкой.
Если файл существует и mode равен QIODevice::Truncate, файл будет обнулен. В противном случае (если mode равен QIODevice::Append), файл будет дополнен.
Вызов setStandardOutputFile() после запуска процесса не имеет эффекта.
Эта функция была добавлена в Qt 4.2.
См. также setStandardInputFile(), setStandardErrorFile() и setStandardOutputProcess().
void QProcess::setStandardOutputProcess(QProcess *destination)
Перенаправляет поток стандартного вывода этого процесса в поток стандартного ввода процесса destination.
Следующая команда оболочки:
command1 | command2
Может быть выполнена с помощью QProcess следующим кодом:
QProcess process1;
QProcess process2;
process1.setStandardOutputProcess(&process2);
process1.start("command1");
process2.start("command2"); Эта функция была добавлена в Qt 4.2.
void QProcess::setWorkingDirectory(const QString &dir)
Устанавливает рабочую директорию в dir. QProcess запустит процесс в этой директории. По умолчанию процесс запускается в рабочей директории вызывающего процесса.
Примечание: В QNX это может привести к временной приостановке всех потоков приложения.
См. также workingDirectory() и start().
[virtual protected] void QProcess::setupChildProcess()
Эта функция вызывается в контексте дочернего процесса непосредственно перед выполнением программы в Unix или macOS (т.е., после fork(), но перед execve()). Переопределите эту функцию для выполнения последней инициализации дочернего процесса. Пример:
class SandboxProcess : public QProcess
{
...
protected:
void setupChildProcess() override;
...
};
void SandboxProcess::setupChildProcess()
{
// Drop all privileges in the child process, and enter
// a chroot jail.
#if defined Q_OS_UNIX
::setgroups(0, 0);
::chroot("/etc/safe");
::chdir("/");
::setgid(safeGid);
::setuid(safeUid);
::umask(0);
#endif
} Вы не можете завершить процесс (например, вызвав exit()) из этой функции. Если вам нужно остановить программу до ее запуска, ваше решение — излучить finished() и затем вызвать exit().
Предупреждение: Эта функция вызывается QProcess только в Unix и macOS. В Windows и QNX она не вызывается.
[static] QStringList QProcess::splitCommand(QStringView command)
Разделяет строку command на список токенов и возвращает список.
Токены с пробелами могут быть заключены в двойные кавычки; три двойные кавычки представляют сам символ кавычки.
Эта функция была добавлена в Qt 5.15.
void QProcess::start(const QString &program, const QStringList &arguments, QIODevice::OpenMode mode = ReadWrite)
Запускает заданную program в новом процессе, передавая аргументы командной строки в arguments.
Объект QProcess немедленно перейдет в состояние запуска. Если процесс запустится успешно, QProcess излучит started(); в противном случае, будет излучен errorOccurred().
Примечание: Процессы запускаются асинхронно, что означает, что сигналы started() и errorOccurred() могут быть задержки. Вызовите waitForStarted(), чтобы убедиться, что процесс запущен (или не запущен) и эти сигналы были излучены.
Примечание: Дальнейшее разделение аргументов не выполняется.
Windows: Аргументы заключаются в кавычки и объединяются в командную строку, совместимую с функцией CommandLineToArgvW() Windows. Для программ, которые имеют другие требования к цитированию командной строки, необходимо использовать setNativeArguments(). Одна из заметных программ, не следующая правилам CommandLineToArgvW(), — cmd.exe и, как следствие, все пакетные скрипты.
Значение OpenMode установлено в mode.
Если объект QProcess уже выполняет процесс, может быть выведено предупреждение в консоль, и существующий процесс будет продолжать выполняться без изменений.
См. также processId(), started(), waitForStarted() и setNativeArguments().
void QProcess::start(QIODevice::OpenMode mode = ReadWrite)
Это перегруженная функция.
Запускает программу, установленную с помощью setProgram(), с аргументами, установленными с помощью setArguments(). Значение OpenMode установлено в mode.
Эта функция была добавлена в Qt 5.1.
См. также open(), setProgram() и setArguments().
END_OF_DOCUMENT_MARKERbool QProcess::startDetached(qint64 *pid = nullptr)
Запускает программу, заданную с помощью setProgram(), с аргументами, заданными с помощью setArguments(), в новом процессе и отсоединяется от него. Возвращает true при успехе; в противном случае возвращает false. Если вызывающий процесс завершается, отделённый процесс продолжит выполняться без изменений.
Unix: Запущенный процесс будет работать в своей собственной сессии и вести себя как демон.
Процесс будет запущен в каталоге, заданном с помощью setWorkingDirectory(). Если workingDirectory() пусто, каталог рабочего процесса наследуется от вызывающего процесса.
Примечание: В QNX это может привести к временной приостановке всех потоков приложения.
Если функция выполняется успешно, то *pid устанавливается в идентификатор процесса запущенного процесса. Обратите внимание, что дочерний процесс может завершиться, и PID может стать недействительным без уведомления. Кроме того, после завершения дочернего процесса тот же PID может быть повторно использован другим процессом. Пользовательский код должен быть осторожен при использовании этой переменной, особенно если предполагается принудительное завершение процесса средствами операционной системы.
Только следующие методы установки свойств поддерживаются startDetached():
- setArguments()
- setCreateProcessArgumentsModifier()
- setNativeArguments()
- setProcessEnvironment()
- setProgram()
- setStandardErrorFile()
- setStandardInputFile()
- setStandardOutputFile()
- setWorkingDirectory()
Все остальные свойства объекта QProcess игнорируются.
Примечание: Вызываемый процесс наследует окно консоли вызывающего процесса. Чтобы подавить вывод консоли, перенаправьте стандартный/ошибочный вывод в QProcess::nullDevice().
Данная функция была введена в Qt 5.10.
См. также start(), startDetached(const QString &program, const QStringList &arguments, const QString &workingDirectory, qint64 *pid), и startDetached(const QString &command).
[static] bool QProcess::startDetached(const QString &program, const QStringList &arguments, const QString &workingDirectory = QString(), qint64 *pid = nullptr)
Эта функция перегружает startDetached().
Запускает программу program с аргументами arguments в новом процессе и отсоединяется от него. Возвращает true при успехе; в противном случае возвращает false. Если вызывающий процесс завершается, отделённый процесс продолжит выполняться без изменений.
Обработка аргументов идентична соответствующему перегрузке start().
Процесс будет запущен в каталоге workingDirectory. Если workingDirectory пуста, каталог рабочего процесса наследуется от вызывающего процесса.
Если функция выполняется успешно, то *pid устанавливается в идентификатор процесса запущенного процесса.
См. также start().
QProcess::ProcessState QProcess::state() const
Возвращает текущее состояние процесса.
См. также stateChanged() и error().
[static] QStringList QProcess::systemEnvironment()
Возвращает среду вызывающего процесса в виде списка пар ключ=значение. Пример:
QStringList environment = QProcess::systemEnvironment();
// environment = {"PATH=/usr/bin:/usr/local/bin",
// "USER=greg", "HOME=/home/greg"} Эта функция не кэширует среду системы. Поэтому можно получить обновлённую версию среды, если были вызваны низкоуровневые функции C-библиотеки, такие как setenv или putenv.
Однако обратите внимание, что повторные вызовы этой функции будут создавать список переменных среды заново, что является нетривиальной операцией.
Примечание: Для нового кода рекомендуется использовать QProcessEnvironment::systemEnvironment()
Данная функция была введена в Qt 4.1.
См. также QProcessEnvironment::systemEnvironment() и setProcessEnvironment().
[override virtual] bool QProcess::waitForBytesWritten(int msecs = 30000)
Реализует: QIODevice::waitForBytesWritten(int msecs).
bool QProcess::waitForFinished(int msecs = 30000)
Ожидает завершения процесса и срабатывания сигнала finished() или истечения msecs миллисекунд.
Возвращает true, если процесс завершился; в противном случае возвращает false (если операция истекла, произошла ошибка или этот QProcess уже завершён).
Эта функция может работать без цикла событий. Она полезна при написании приложений без графического интерфейса и при выполнении операций ввода-вывода в потоке без графического интерфейса.
Предупреждение: Вызов этой функции из главного (графического) потока может заблокировать ваш пользовательский интерфейс.
Если msecs равно -1, эта функция не будет ожидать таймаута.
См. также finished(), waitForStarted(), waitForReadyRead() и waitForBytesWritten().
[override virtual] bool QProcess::waitForReadyRead(int msecs = 30000)
Реализует: QIODevice::waitForReadyRead(int msecs).
bool QProcess::waitForStarted(int msecs = 30000)
Ожидает запуска процесса и срабатывания сигнала started() или истечения msecs миллисекунд.
Возвращает true, если процесс был запущен успешно; в противном случае возвращает false (если операция истекла или произошла ошибка).
Эта функция может работать без цикла событий. Она полезна при написании приложений без графического интерфейса и при выполнении операций ввода-вывода в потоке без графического интерфейса.
Предупреждение: Вызов этой функции из главного (графического) потока может заблокировать ваш пользовательский интерфейс.
Если msecs равно -1, эта функция не будет ожидать таймаута.
Примечание: На некоторых операционных системах Unix эта функция может возвращать true, но процесс позже может сообщить об ошибке QProcess::FailedToStart.
См. также started(), waitForReadyRead(), waitForBytesWritten() и waitForFinished().
QString QProcess::workingDirectory() const
Если для QProcess задан каталог рабочего процесса, эта функция возвращает каталог рабочего процесса, в который QProcess войдёт перед запуском программы. В противном случае (т.е., если каталог не задан) возвращается пустая строка, и QProcess использует текущий рабочий каталог приложения.
См. также setWorkingDirectory().
[override virtual protected] qint64 QProcess::writeData(const char *data, qint64 len)
Реализует: QIODevice::writeData(const char *data, qint64 maxSize).
Связанные нечлены
typedef Q_PID
Тип для идентификаторов, используемых для представления процессов на платформе. В Unix это соответствует qint64; в Windows – _PROCESS_INFORMATION*.
См. также QProcess::pid().
Документация по макросам
QT_NO_PROCESS_COMBINED_ARGUMENT_START
Отключает перегрузку QProcess::start() с одним строковым аргументом. В большинстве случаев, когда она используется, пользователь намеревается обработать первый аргумент как атомарный, как в других перегрузках.
Данная функция была введена в Qt 5.6.
См. также QProcess::start(const QString &command, QIODevice::OpenMode mode).
© The Qt Company Ltd
Licensed under the GNU Free Documentation License, Version 1.3.
https://doc.qt.io/qt-5.15/qprocess.html