Spec-Zone.ru › Qt 5.6

Класс QProcess

Класс QProcess используется для запуска внешних программ и взаимодействия с ними. Подробнее...

Заголовок: #include <QProcess>
qmake: QT += core
Наследует: QIODevice
  • Список всех членов, включая унаследованные
  • Устаревшие члены

Примечание: Все функции в этом классе являются взаимоисключающими.

Публичные типы

Перечисление 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 = Q_NULLPTR)
virtual ~QProcess()
QStringList arguments() const
void closeReadChannel(ProcessChannel channel)
void closeWriteChannel()
QProcess::ProcessError error() const
int exitCode() const
QProcess::ExitStatus exitStatus() const
InputChannelMode inputChannelMode() const
QString nativeArguments() const
ProcessChannelMode processChannelMode() const
QProcessEnvironment processEnvironment() const
qint64 processId() const
QString program() const
QByteArray readAllStandardError()
QByteArray readAllStandardOutput()
ProcessChannel readChannel() const
void setArguments(const QStringList &arguments)
void setInputChannelMode(InputChannelMode mode)
void setNativeArguments(const QString &arguments)
void setProcessChannelMode(ProcessChannelMode mode)
void setProcessEnvironment(const QProcessEnvironment &environment)
void setProgram(const QString &program)
void setReadChannel(ProcessChannel channel)
void setStandardErrorFile(const QString &fileName, OpenMode mode = Truncate)
void setStandardInputFile(const QString &fileName)
void setStandardOutputFile(const QString &fileName, OpenMode mode = Truncate)
void setStandardOutputProcess(QProcess *destination)
void setWorkingDirectory(const QString &dir)
void start(const QString &program, const QStringList &arguments, OpenMode mode = ReadWrite)
void start(const QString &command, OpenMode mode = ReadWrite)
void start(OpenMode mode = ReadWrite)
QProcess::ProcessState state() const
bool waitForFinished(int msecs = 30000)
bool waitForStarted(int msecs = 30000)
QString workingDirectory() const

Переопределённые публичные функции

virtual bool atEnd() const
virtual qint64 bytesAvailable() const
virtual qint64 bytesToWrite() const
virtual bool canReadLine() const
virtual void close()
virtual bool isSequential() const
virtual bool open(OpenMode mode = ReadWrite)
virtual bool waitForBytesWritten(int msecs = 30000)
virtual bool waitForReadyRead(int msecs = 30000)
  • 33 публичные функции унаследованы от QIODevice
  • 31 публичные функции унаследованы от QObject

Публичные слоты

void kill()
void terminate()
  • 1 public slot inherited from QObject

Сигналы

void errorOccurred(QProcess::ProcessError error)
void finished(int exitCode, QProcess::ExitStatus exitStatus)
void readyReadStandardError()
void readyReadStandardOutput()
void started()
void stateChanged(QProcess::ProcessState newState)
  • 4 signals inherited from QIODevice
  • 2 signals inherited from QObject

Статические публичные члены

int execute(const QString &program, const QStringList &arguments)
int execute(const QString &command)
QString nullDevice()
bool startDetached(const QString &program, const QStringList &arguments, const QString &workingDirectory = QString(), qint64 *pid = Q_NULLPTR)
bool startDetached(const QString &command)
QStringList systemEnvironment()
  • 11 static public members inherited from QObject

Защищённые функции

void setProcessState(ProcessState state)
virtual void setupChildProcess()

Переопределённые защищённые функции

virtual qint64 readData(char *data, qint64 maxlen)
virtual qint64 writeData(const char *data, qint64 len)
  • 5 protected functions inherited from QIODevice
  • 9 protected functions inherited from QObject

Связанные нечлены

typedef Q_PID

Макросы

QT_NO_PROCESS_COMBINED_ARGUMENT_START

Дополнительные унаследованные члены

  • 1 property inherited from QObject

Подробное описание

Класс QProcess используется для запуска внешних программ и для взаимодействия с ними.

Запуск процесса

Для запуска процесса передайте имя и аргументы командной строки программы, которую вы хотите запустить, в качестве аргументов в 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.

Примечание: В Windows CE чтение и запись в процесс не поддерживаются.

Когда процесс завершается, QProcess снова переходит в состояние NotRunning (начальное состояние) и излучает finished().

Сигнал finished() предоставляет код завершения и статус завершения процесса в качестве аргументов, и вы также можете вызвать exitCode(), чтобы получить код завершения последнего завершённого процесса, и exitStatus(), чтобы получить его статус завершения. Если в какой-либо момент произойдёт ошибка, QProcess излучит сигнал errorOccurred(). Вы также можете вызвать error(), чтобы найти тип ошибки, которая произошла в последний раз, и state(), чтобы найти текущее состояние процесса.

Взаимодействие через каналы

Процессы имеют два предопределённых канала вывода: канал стандартного вывода (stdout) обеспечивает обычный вывод консоли, а канал стандартной ошибки (stderr) обычно предоставляет ошибки, которые печатает процесс. Эти каналы представляют собой два отдельных потока данных. Вы можете переключаться между ними, вызвав setReadChannel(). QProcess излучает readyRead(), когда данные доступны в текущем канале чтения. Он также излучает readyReadStandardOutput(), когда доступны новые данные стандартного вывода, и когда доступны новые данные стандартной ошибки, излучается readyReadStandardError(). Вместо вызова read(), readLine() или getChar(), вы можете явно прочитать все данные из любого из двух каналов, вызвав readAllStandardOutput() или readAllStandardError().

Терминология для каналов может быть вводящей в заблуждение. Обратите внимание, что каналы вывода процесса соответствуют каналам чтения QProcess, тогда как каналы ввода процесса соответствуют каналам записи QProcess. Это потому, что то, что мы читаем с помощью QProcess, является выводом процесса, а то, что мы записываем, становится вводом процесса.

QProcess может объединить два канала вывода, так что данные стандартного вывода и стандартной ошибки из работающего процесса будут использовать канал стандартного вывода. Вызовите setProcessChannelMode() со значением MergedChannels перед запуском процесса, чтобы активировать эту функцию. У вас также есть возможность перенаправить вывод работающего процесса в вызывающий, главный процесс, передав ForwardedChannels в качестве аргумента. Также возможно перенаправить только один из каналов вывода — обычно используется ForwardedErrorChannel, но также существует ForwardedOutputChannel. Обратите внимание, что использование перенаправления каналов обычно является плохой идеей в приложениях графического интерфейса пользователя — вы должны представлять ошибки графически вместо этого.

Некоторые процессы нуждаются в специальных настройках среды для работы. Вы можете установить переменные среды для своего процесса, вызвав setProcessEnvironment(). Чтобы установить рабочую директорию, вызовите setWorkingDirectory(). По умолчанию процессы выполняются в текущей рабочей директории вызывающего процесса.

Расположение и порядок следования окон, принадлежащих приложениям графического интерфейса пользователя, запущенным с помощью 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.

Документация по типам членов

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 намеренно подавляет вывод из приложений, использующих только графический интерфейс, в унаследованные консоли. Это не относится к выводу, перенаправленному в файлы или каналы. Чтобы перенаправить вывод приложений, использующих только графический интерфейс, в консоль, тем не менее, вы должны использовать 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 = Q_NULLPTR)

Конструирует объект QProcess с указанным parent.

[virtual] QProcess::~QProcess()

Деструктор объекта QProcess, т.е. завершение процесса.

Обратите внимание, что эта функция не вернётся, пока процесс не будет завершён.

QStringList QProcess::arguments() const

Возвращает аргументы командной строки, с которыми процесс был запущен последний раз.

Эта функция была введена в Qt 5.0.

См. также setArguments() и start().

[virtual] bool QProcess::atEnd() const

Переопределено из QIODevice::atEnd().

Возвращает true если процесс не запущен и больше данных для чтения недоступно; в противном случае возвращает false.

[virtual] qint64 QProcess::bytesAvailable() const

Переопределено из QIODevice::bytesAvailable().

[virtual] qint64 QProcess::bytesToWrite() const

Переопределено из QIODevice::bytesToWrite().

[virtual] bool QProcess::canReadLine() const

Переопределено из QIODevice::canReadLine().

Эта функция работает с текущим каналом чтения.

См. также readChannel() и setReadChannel().

[virtual] void QProcess::close()

Переопределено из QIODevice::close().

Закрывает все каналы связи с процессом и убивает его. После вызова этой функции QProcess больше не будет издавать readyRead(), и данные больше нельзя читать или записывать.

void QProcess::closeReadChannel(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::ProcessError QProcess::error() const

Возвращает тип последней произошедшей ошибки.

См. также state().

[signal] void QProcess::errorOccurred(QProcess::ProcessError error)

Этот сигнал излучается при возникновении ошибки с процессом. Указанная error описывает тип произошедшей ошибки.

Эта функция была введена в Qt 5.6.

[static] int QProcess::execute(const QString &program, const QStringList &arguments)

Запускает программу program с аргументами arguments в новом процессе, ожидает его завершения и возвращает код завершения процесса. Любые данные, которые новый процесс записывает в консоль, передаются в вызывающий процесс.

Среда и рабочая директория наследуются от вызывающего процесса.

Обработка аргументов идентична соответствующему перегрузке start().

Если процесс нельзя запустить, возвращается -2. Если процесс завершается аварийно, возвращается -1. В противном случае возвращается код завершения процесса.

См. также start().

[static] int QProcess::execute(const QString &command)

Это перегруженная функция.

Запускает программу command в новом процессе, ожидает его завершения и возвращает код завершения.

Обработка аргументов идентична соответствующему перегрузке start().

После разделения и удаления кавычек из строки command, эта функция ведет себя как перегрузка, принимающая аргументы в виде списка строк.

См. также start().

int QProcess::exitCode() const

Возвращает код завершения последнего завершенного процесса.

Это значение недействительно, если exitStatus() не возвращает NormalExit.

QProcess::ExitStatus QProcess::exitStatus() const

Возвращает код завершения последнего завершенного процесса.

В Windows, если процесс был завершен с помощью TerminateProcess() из другого приложения, эта функция все равно вернёт NormalExit, если только код выхода не меньше 0.

Эта функция была введена в Qt 4.1.

[signal] void QProcess::finished(int exitCode, QProcess::ExitStatus exitStatus)

Этот сигнал излучается при завершении процесса. exitCode — код завершения процесса (действителен только для нормальных завершений), а exitStatus — код завершения. После завершения процесса буферы в QProcess остаются нетронутыми. Вы по-прежнему можете прочитать любые данные, которые процесс мог записать до завершения.

Примечание: Сигнал finished перегружен в этом классе. Для подключения к нему с помощью синтаксиса указателя на функцию необходимо указать тип сигнала в статическом преобразовании, как показано в этом примере:

connect(process, static_cast<void(QProcess::*)(int, QProcess::ExitStatus)>(&QProcess::finished),
    [=](int exitCode, QProcess::ExitStatus exitStatus){ /* ... */ });

См. также exitStatus().

InputChannelMode QProcess::inputChannelMode() const

Возвращает режим канала стандартного ввода QProcess.

Эта функция была введена в Qt 5.2.

См. также setInputChannelMode() и InputChannelMode.

[virtual] bool QProcess::isSequential() const

Переопределено из QIODevice::isSequential().

[slot] void QProcess::kill()

Убивает текущий процесс, заставляя его немедленно выйти.

В Windows функция kill() использует TerminateProcess, а в Unix и macOS отправляется сигнал SIGKILL процессу.

См. также terminate().

QString QProcess::nativeArguments() const

Возвращает дополнительные системные аргументы командной строки для программы.

Примечание: Эта функция доступна только на платформе Windows.

Эта функция была введена в Qt 4.7.

См. также setNativeArguments().

[static] QString QProcess::nullDevice()

Пустой файл операционной системы.

Возвращаемый путь к файлу использует системные разделители каталогов.

Эта функция была введена в Qt 5.2.

См. также QProcess::setStandardInputFile(), QProcess::setStandardOutputFile() и QProcess::setStandardErrorFile().

[virtual] bool QProcess::open(OpenMode mode = ReadWrite)

Переопределено из QIODevice::open().

Запускает программу, заданную setProgram(), с аргументами, заданными setArguments(). Режим OpenMode устанавливается в mode.

Этот метод является псевдонимом для start() и существует только для полного реализации интерфейса, определенного QIODevice.

См. также start(), setProgram() и setArguments().

ProcessChannelMode QProcess::processChannelMode() const

Возвращает режим канала стандартного вывода и стандартной ошибки QProcess.

Эта функция была введена в Qt 4.2.

См. также setProcessChannelMode(), ProcessChannelMode и setReadChannel().

QProcessEnvironment QProcess::processEnvironment() const

Возвращает среду, которую QProcess передаст своему дочернему процессу, или пустой объект, если среда не была установлена с помощью setEnvironment() или setProcessEnvironment(). Если среда не была установлена, будет использоваться среда вызывающего процесса.

Примечание: Настройки среды игнорируются в Windows CE, поскольку там нет понятия среды.

Эта функция была введена в 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().

ProcessChannel QProcess::readChannel() const

Возвращает текущий канал чтения объекта QProcess.

См. также setReadChannel().

[virtual protected] qint64 QProcess::readData(char *data, qint64 maxlen)

Переопределяет метод QIODevice::readData().

[signal] void QProcess::readyReadStandardError()

Этот сигнал испускается, когда процесс предоставил новые данные через канал стандартной ошибки (stderr). Он испускается независимо от текущего канала чтения.

Примечание: Это частный сигнал. Он может использоваться в соединениях сигналов, но не может быть испущен пользователем.

См. также readAllStandardError() и readChannel().

[signal] void QProcess::readyReadStandardOutput()

Этот сигнал испускается, когда процесс предоставил новые данные через канал стандартного вывода (stdout). Он испускается независимо от текущего канала чтения.

Примечание: Это частный сигнал. Он может использоваться в соединениях сигналов, но не может быть испущен пользователем.

См. также readAllStandardOutput() и readChannel().

void QProcess::setArguments(const QStringList &arguments)

Устанавливает arguments для передачи вызываемой программе при запуске процесса. Эта функция должна быть вызвана перед start().

Функция была добавлена в Qt 5.1.

См. также start(), setProgram() и arguments().

void QProcess::setInputChannelMode(InputChannelMode mode)

Устанавливает режим канала стандартного ввода QProcess в mode. Этот режим будет использоваться при следующем вызове start().

Функция была добавлена в Qt 5.2.

См. также inputChannelMode() и InputChannelMode.

void QProcess::setNativeArguments(const QString &arguments)

Это перегруженная функция.

Устанавливает дополнительные системные параметры командной строки arguments для программы.

В операционных системах, где системный API для передачи параметров командной строки дочернему процессу использует одну строку, можно представить командные строки, которые нельзя передать через поставляемый в QProcess список-API. В таких случаях эта функция используется для установки строки, которая добавляется к строке, составленной из обычного списка аргументов, с разделителем пробела.

Примечание: Эта функция доступна только в платформе Windows.

Функция была добавлена в Qt 4.7.

См. также nativeArguments().

void QProcess::setProcessChannelMode(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(ProcessState state)

Устанавливает текущее состояние QProcess в указанное state.

См. также state().

void QProcess::setProgram(const QString &program)

Устанавливает program для использования при запуске процесса. Эта функция должна быть вызвана перед start().

Функция была добавлена в Qt 5.1.

См. также start(), setArguments() и program().

void QProcess::setReadChannel(ProcessChannel channel)

Устанавливает текущий канал чтения QProcess на заданный channel. Текущий канал ввода используется функциями read(), readAll(), readLine() и getChar(). Также он определяет, какой канал приводит к тому, что QProcess испускает readyRead().

См. также readChannel().

void QProcess::setStandardErrorFile(const QString &fileName, 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() приведет к ошибке).

Чтобы сделать процесс сразу прочитать EOF, передайте nullDevice() сюда. Это чище, чем использование closeWriteChannel() перед записью любых данных, потому что оно может быть настроено до запуска процесса.

Если файл fileName не существует в момент вызова start() или не может быть прочитан, запуск процесса завершится ошибкой.

Вызов setStandardInputFile() после запуска процесса не оказывает влияния.

Функция была добавлена в Qt 4.2.

См. также setStandardOutputFile(), setStandardErrorFile() и setStandardOutputProcess().

void QProcess::setStandardOutputFile(const QString &fileName, 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();
    ...
};

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 она не вызывается.

void QProcess::start(const QString &program, const QStringList &arguments, OpenMode mode = ReadWrite)

Запускает заданную program в новом процессе, передавая аргументы командной строки в arguments.

Объект QProcess немедленно переходит в состояние Starting. Если процесс запустится успешно, QProcess испустит started(); в противном случае будет испущен errorOccurred().

Примечание: Процессы запускаются асинхронно, что означает, что сигналы started() и errorOccurred() могут быть задержаны. Вызовите waitForStarted(), чтобы убедиться, что процесс запущен (или не удалось запустить) и эти сигналы были испущены.

Примечание: Дальнейшее разделение аргументов не выполняется.

Windows: Аргументы заключаются в кавычки и объединяются в строку команд, совместимую с функцией CommandLineToArgvW() Windows. Для программ с различными требованиями к цитированию аргументов командной строки необходимо использовать setNativeArguments(). Одна заметная программа, которая не следует правилам CommandLineToArgvW(), — cmd.exe, а следовательно, и все скрипты пакетной обработки.

Значение OpenMode устанавливается в mode.

Если объект QProcess уже выполняет процесс, может быть выведено предупреждение в консоль, и существующий процесс продолжит работу без изменений.

См. также processId(), started(), waitForStarted() и setNativeArguments().

void QProcess::start(const QString &command, OpenMode mode = ReadWrite)

Это перегруженная функция.

Запускает команду command в новом процессе. Значение OpenMode устанавливается в mode.

command — строка текста, содержащая имя программы и её аргументы. Аргументы разделяются одним или несколькими пробелами. Например:

QProcess process;
process.start("del /s *.txt");
// same as process.start("del", QStringList() << "/s" << "*.txt");
...

Аргументы, содержащие пробелы, должны быть заключены в кавычки, чтобы правильно передаваться новому процессу. Например:

QProcess process;
process.start("dir \"My Documents\"");

Литеральные кавычки в строке command представлены тройными кавычками. Например:

QProcess process;
process.start("dir \"Epic 12\"\"\" Singles\"");

После разделения и удаления кавычек из строки command эта функция ведет себя как перегрузка, которая принимает аргументы в виде списка строк.

Вы можете отключить эту перегрузку, определив QT_NO_PROCESS_COMBINED_ARGUMENT_START при компиляции приложений. Это может быть полезно, если вы хотите убедиться, что аргументы не разделяются непреднамеренно, например. Во всех случаях использование другой перегрузки является предпочтительным методом.

В операционных системах, где системный API для передачи аргументов командной строки дочернему подпроцессу изначально использует одну строку (Windows), можно представить строки команд, которые не могут быть переданы через основанный на списке API QProcess. В этих редких случаях необходимо использовать setProgram() и setNativeArguments() вместо этой функции.

void QProcess::start(OpenMode mode = ReadWrite)

Это перегруженная функция.

Запускает программу, заданную с помощью setProgram(), с аргументами, заданными с помощью setArguments(). Значение OpenMode устанавливается в mode.

Данная функция была добавлена в Qt 5.1.

См. также open(), setProgram() и setArguments().

[static] bool QProcess::startDetached(const QString &program, const QStringList &arguments, const QString &workingDirectory = QString(), qint64 *pid = Q_NULLPTR)

Запускает программу program с аргументами arguments в новом процессе и отсоединяется от него. Возвращает true при успехе; в противном случае возвращает false. Если вызывающий процесс завершается, отделённый процесс продолжит выполняться без изменений.

Обработка аргументов идентична соответствующей перегрузке start().

Unix: Запущенный процесс будет выполняться в своей сессии и вести себя как демон.

Процесс будет запущен в директории workingDirectory. Если workingDirectory пустая, рабочая директория наследуется от вызывающего процесса.

Примечание: В QNX это может привести к временному зависанию всех потоков приложения.

Если функция выполнена успешно, *pid устанавливается в идентификатор процесса запущенного процесса.

См. также start().

[static] bool QProcess::startDetached(const QString &command)

Это перегруженная функция.

Запускает команду command в новом процессе и отсоединяется от него. Возвращает true при успехе; в противном случае возвращает false.

Обработка аргументов идентична соответствующей перегрузке start().

После разделения и удаления кавычек из строки command эта функция ведет себя как перегрузка, которая принимает аргументы в виде списка строк.

См. также start(const QString &command, OpenMode mode).

[signal] void QProcess::started()

Этот сигнал испускается QProcess, когда процесс запущен, и state() возвращает Running.

Примечание: Это частный сигнал. Он может использоваться в соединениях сигналов, но не может испускаться пользователем.

QProcess::ProcessState QProcess::state() const

Возвращает текущее состояние процесса.

См. также stateChanged() и error().

[signal] void QProcess::stateChanged(QProcess::ProcessState newState)

Этот сигнал излучается всякий раз, когда состояние QProcess изменяется. Аргумент newState — это состояние, в которое перешло QProcess.

Примечание: Это частный сигнал. Он может использоваться в соединениях сигналов, но не может излучаться пользователем.

[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().

[slot] void QProcess::terminate()

Попытка завершить процесс.

Процесс может не завершиться в результате вызова этой функции (ему предоставляется возможность запросить у пользователя сохранение несохранённых файлов и т.п.).

В Windows функция terminate() посылает сообщение WM_CLOSE во все окна верхнего уровня процесса, а затем — в основной поток самого процесса. В Unix и macOS отправляется сигнал SIGTERM.

Консольные приложения в Windows, которые не запускают цикл событий или цикл событий не обрабатывает сообщение WM_CLOSE, можно завершить только вызовом kill().

См. также kill().

[virtual] bool QProcess::waitForBytesWritten(int msecs = 30000)

Переопределяет метод QIODevice::waitForBytesWritten().

bool QProcess::waitForFinished(int msecs = 30000)

Задерживает выполнение, пока процесс не завершится и не будет излучен сигнал finished(), или пока не пройдёт msecs миллисекунд.

Возвращает true, если процесс завершился; в противном случае возвращает false (если операция закончилась по таймауту, произошла ошибка или данный QProcess уже завершён).

Эта функция может работать без цикла событий. Она полезна при написании приложений без графического интерфейса и при выполнении операций ввода-вывода в потоке без GUI.

Предупреждение: Вызов этой функции из основного (GUI) потока может заблокировать графический интерфейс.

Если msecs равно -1, эта функция не будет ожидать таймаут.

См. также finished(), waitForStarted(), waitForReadyRead(), и waitForBytesWritten().

[virtual] bool QProcess::waitForReadyRead(int msecs = 30000)

Переопределяет метод QIODevice::waitForReadyRead().

bool QProcess::waitForStarted(int msecs = 30000)

Задерживает выполнение, пока процесс не начнётся и не будет излучен сигнал started(), или пока не пройдёт msecs миллисекунд.

Возвращает true, если процесс был успешно запущен; в противном случае возвращает false (если операция закончилась по таймауту или произошла ошибка).

Эта функция может работать без цикла событий. Она полезна при написании приложений без графического интерфейса и при выполнении операций ввода-вывода в потоке без GUI.

Предупреждение: Вызов этой функции из основного (GUI) потока может заблокировать графический интерфейс.

Если msecs равно -1, эта функция не будет ожидать таймаут.

Примечание: На некоторых операционных системах UNIX эта функция может возвращать true, но процесс может позже сообщить об ошибке QProcess::FailedToStart.

См. также started(), waitForReadyRead(), waitForBytesWritten(), и waitForFinished().

QString QProcess::workingDirectory() const

Если QProcess получил рабочую директорию, эта функция возвращает рабочую директорию, в которую войдёт QProcess перед запуском программы. В противном случае (т.е. директория не задана) возвращается пустая строка, и QProcess будет использовать текущую рабочую директорию приложения.

См. также setWorkingDirectory().

[virtual protected] qint64 QProcess::writeData(const char *data, qint64 len)

Переопределяет метод QIODevice::writeData().

Связанные нечлены

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, OpenMode mode).

© The Qt Company Ltd
Licensed under the GNU Free Documentation License, Version 1.3.
https://doc.qt.io/archives/qt-5.6/qprocess.html

Spec-Zone.ru

Настройки Оффлайн Что нового Помощь О нас
Spec-Zone .ru
спецификации, руководства, описания, API