QProcess Class
QProcessクラスは、外部プログラムの起動や外部プログラムとの通信に使用される。詳細...
Header: | #include <QProcess> |
CMake: | find_package(Qt6 REQUIRED COMPONENTS Core) target_link_libraries(mytarget PRIVATE Qt6::Core) |
qmake: | QT += core |
Inherits: | QIODevice |
- 継承されたメンバを含む全メンバのリスト
- 非推奨メンバー
- QProcessは、Input/OutputおよびNetworkingに属しています。
注意:このクラスの関数はすべてリエントラントです。
パブリック型
struct | CreateProcessArguments |
(since 6.6) struct | UnixProcessParameters |
CreateProcessArgumentModifier | |
enum | ExitStatus { NormalExit, CrashExit } |
enum | InputChannelMode { ManagedInputChannel, ForwardedInputChannel } |
enum | ProcessChannel { StandardOutput, StandardError } |
enum | ProcessChannelMode { SeparateChannels, MergedChannels, ForwardedChannels, ForwardedErrorChannel, ForwardedOutputChannel } |
enum | ProcessError { FailedToStart, Crashed, Timedout, WriteError, ReadError, UnknownError } |
enum | ProcessState { NotRunning, Starting, Running } |
(since 6.6) enum class | UnixProcessFlag { CloseFileDescriptors, CreateNewSession, DisconnectControllingTerminal, IgnoreSigPipe, ResetIds, …, UseVFork } |
flags | UnixProcessFlags |
パブリック関数
QProcess(QObject *parent = nullptr) | |
virtual | ~QProcess() |
QStringList | arguments() const |
(since 6.0) std::function<void ()> | childProcessModifier() const |
void | closeReadChannel(QProcess::ProcessChannel channel) |
void | closeWriteChannel() |
QProcess::CreateProcessArgumentModifier | createProcessArgumentsModifier() const |
QProcess::ProcessError | error() const |
int | exitCode() const |
QProcess::ExitStatus | exitStatus() const |
(since 6.7) void | failChildProcessModifier(const char *description, int error = 0) |
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) |
(since 6.0) void | setChildProcessModifier(const std::function<void ()> &modifier) |
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, QIODeviceBase::OpenMode mode = Truncate) |
void | setStandardInputFile(const QString &fileName) |
void | setStandardOutputFile(const QString &fileName, QIODeviceBase::OpenMode mode = Truncate) |
void | setStandardOutputProcess(QProcess *destination) |
(since 6.6) void | setUnixProcessParameters(const QProcess::UnixProcessParameters ¶ms) |
(since 6.6) void | setUnixProcessParameters(QProcess::UnixProcessFlags flagsOnly) |
void | setWorkingDirectory(const QString &dir) |
void | start(const QString &program, const QStringList &arguments = {}, QIODeviceBase::OpenMode mode = ReadWrite) |
void | start(QIODeviceBase::OpenMode mode = ReadWrite) |
(since 6.0) void | startCommand(const QString &command, QIODeviceBase::OpenMode mode = ReadWrite) |
bool | startDetached(qint64 *pid = nullptr) |
QProcess::ProcessState | state() const |
(since 6.6) QProcess::UnixProcessParameters | unixProcessParameters() const |
bool | waitForFinished(int msecs = 30000) |
bool | waitForStarted(int msecs = 30000) |
QString | workingDirectory() const |
再実装パブリック関数
virtual qint64 | bytesToWrite() const override |
virtual void | close() override |
virtual bool | isSequential() const override |
virtual bool | open(QIODeviceBase::OpenMode mode = ReadWrite) override |
virtual bool | waitForBytesWritten(int msecs = 30000) override |
virtual bool | waitForReadyRead(int msecs = 30000) override |
パブリック・スロット
シグナル
void | errorOccurred(QProcess::ProcessError error) |
void | finished(int exitCode, QProcess::ExitStatus exitStatus = NormalExit) |
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) |
再実装された保護された関数
virtual qint64 | readData(char *data, qint64 maxlen) override |
詳細説明
プロセスの実行
プロセスを開始するには、実行したいプログラムの名前とコマンドライン引数を引数としてstart() に渡す。引数は、QStringList 内の個々の文字列として渡される。
または、setProgram() およびsetArguments() で実行するプログラムを設定し、start() またはopen() を呼び出すこともできます。
例えば、以下のコード・スニペットは、引数リストの2つの項目として"-style "と "fusion "を含む文字列を渡すことで、X11プラットフォーム上で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では、プロセスをシーケンシャルI/Oデバイスとして扱うことができます。QTcpSocket を使用してネットワーク接続にアクセスするのと同じように、プロセスに書き込んだり、プロセスから読み込んだりすることができます。その後、write ()を呼び出すことで、プロセスの標準入力に書き込むことができ、read ()、readLine ()、getChar ()を呼び出すことで、標準出力を読み取ることができる。QProcess はQIODevice を継承しているため、QXmlReader の入力ソースとして使用したり、QNetworkAccessManager を使用してアップロードするデータを生成したりすることもできます。
プロセスが終了すると、QProcessはNotRunning (初期状態)に戻り、finished ()を発する。
finished() シグナルは、プロセスの終了コードと終了ステータスを引数として提供します。また、exitCode() を呼び出して最後に終了したプロセスの終了コードを取得し、exitStatus() を呼び出してその終了ステータスを取得することもできます。任意の時点でエラーが発生した場合、QProcess はerrorOccurred() シグナルを発します。また、最後に発生したエラーの種類を調べるにはerror() を、現在のプロセスの状態を調べるにはstate() を呼び出します。
注: QProcessはVxWorks、iOS、tvOS、watchOSではサポートされていません。
実行ファイルの検索
実行するプログラムは、setProgram ()を呼び出すか、start ()呼び出しで直接設定できます。プログラム名と引数を指定してstart() を呼び出すと、その関数の前にsetProgram() とsetArguments() を呼び出し、それらのパラメータを指定せずにオーバーロードを呼び出すのと同じ効果が得られます。
QProcessは、UnixのシェルやWindowsのコマンド・インタプリタがそれぞれのコマンド・ラインでどのように動作するかと同様に、3つの異なる方法のいずれかでプログラム名を解釈します:
- プログラム名が絶対パスの場合、QProcessは検索を行わず、その実行ファイルを起動する。
- プログラム名が複数のパス要素を持つ相対パスの場合(つまり、少なくとも1つのスラッシュを含む)、その相対パスが検索される開始ディレクトリはOSに依存します:Windowsでは親プロセスの現在の作業ディレクトリになり、UnixではsetWorkingDirectory ()で設定されたディレクトリになります。
- プログラム名がスラッシュのないプレーンなファイル名の場合、動作はオペレーティングシステムに依存します。Unixシステムでは、QProcessは
PATH
環境変数を検索します。Windowsでは、検索はOSによって実行され、PATH
環境変数の前に親プロセスのカレントディレクトリが最初に検索されます(完全なリストについては、CreateProcessのドキュメントを参照してください)。
プラットフォーム依存の動作や、現在のアプリケーションの起動方法に関する問題を回避するには、起動する実行ファイルへの絶対パスを常に渡すことをお勧めします。アプリケーションに同梱されている補助バイナリの場合は、QCoreApplication::applicationDirPath() で始まるパスを指定します。同様に、setWorkingDirectory()で設定したディレクトリからの相対パスで実行可能ファイルを明示的に実行する場合は、"./"または"../"で始まるプログラムパスを使用します。
Windows では、CreateProcess のドキュメントで説明されている以外のほとんどの用途で「.exe」接尾辞は必要ありません。さらに、QProcess はプログラム名の Unix スタイルのフォワードスラッシュを Windows パスのバックスラッシュに変換します。これにより、上記の例に示すように、QProcess を使用するコードをクロスプラットフォームで記述できるようになります。
QProcessは、cmd.exe
'のdir
コマンドやボーンシェルのexport
のような、UnixシェルやWindowsコマンドインタプリタの組み込み関数を直接実行することはサポートしていません。Unixでは、多くのシェル組み込み関数も別の実行可能ファイルとして提供されていますが、その動作は組み込み関数として実装されたものとは異なる場合があります。これらのコマンドを実行するには、適切なオプションを指定して明示的にインタプリタを実行する必要があります。Unixシステムの場合、"/bin/sh "を2つの引数で起動する:c "と、実行するコマンドラインの文字列である。Windowsの場合、cmd.exe
がコマンドラインを解析する方法が非標準であるため、setNativeArguments() を使用する(たとえば、"/c dir d:")。
環境変数
QProcess APIには、子プロセスが参照する環境変数を操作するメソッドが用意されています。デフォルトでは、子プロセスは、start() 関数が呼び出された時点で存在する現在のプロセスの環境変数のコピーを持ちます。つまり、qputenv() を呼び出す前に行われた変更は、子プロセスの環境変数に反映されます。QProcess は、他のスレッドで発生するqputenv() との競合状態を防止しようとしないため、アプリケーションの初期起動後はqputenv() を使用しないことを推奨します。
特定の子プロセスの環境は、QProcessEnvironment クラスを使用するprocessEnvironment() およびsetProcessEnvironment() 関数を使用して変更できます。デフォルトでは、processEnvironment() は、QProcessEnvironment::inheritsFromParent() が真であるオブジェクトを返します。親から継承していない環境を設定すると、QProcess が起動したときに、子プロセスにその環境が使用されます。
通常のシナリオでは、QProcessEnvironment::systemEnvironment() を呼び出して現在の環境から開始し、特定の変数を追加、変更、または削除していきます。その後、setProcessEnvironment() を使用して、QProcess に結果の変数名簿を適用することができます。
QProcessEnvironment() のデフォルト・コンストラクタを使用して、環境からすべての変数を削除したり、空の環境から開始したりすることができます。これは、現在のプロセス環境に設定され、子プロセスの適切な実行に必要なシステム変数があるかもしれないので、制御されたシステム固有の条件以外ではお勧めできません。
Windows では、QProcess は現在のプロセスの"PATH"
と"SystemRoot"
環境変数をコピーします。これらを完全に解除することはできませんが、空の値に設定することは可能です。Windowsで"PATH"
を空に設定すると、子プロセスの起動に失敗する可能性が高い。
チャンネルを介した通信
プロセスには2つの定義済み出力チャンネルがある:標準出力チャネル (stdout
) は通常のコンソール出力を供給し、 標準エラー・チャネル (stderr
) は通常プロセスが出力するエラーを供給する。これらのチャネルは、2つの別々のデータ・ストリームを表している。これらのチャネルは、setReadChannel() を呼び出すことで切り替えることができます。QProcess は、現在の読み取りチャネルでデータが利用可能になるとreadyRead() を発行します。また、新しい標準出力データが利用可能になるとreadyReadStandardOutput() を、新しい標準エラーデータが利用可能になるとreadyReadStandardError() を呼び出します。read ()、readLine ()、getChar ()を呼び出す代わりに、readAllStandardOutput ()またはreadAllStandardError ()を呼び出せば、2つのチャネルのいずれかからすべてのデータを明示的に読み出すことができる。
チャンネルに関する用語は誤解を招く可能性があります。プロセスの出力チャンネルはQProcessの読み込みチャンネルに対応し、プロセスの入力チャンネルはQProcessの書き込みチャンネルに対応することに注意してください。これは、QProcessを使って読んだものがプロセスの出力になり、書いたものがプロセスの入力になるからです。
QProcessは2つの出力チャンネルをマージすることができるので、実行中のプロセスからの標準出力と標準エラーデータの両方が標準出力チャンネルを使用します。この機能を有効にするには、プロセスを開始する前にMergedChannels でsetProcessChannelMode() を呼び出してください。また、ForwardedChannels を引数に渡すことで、実行中のプロセスの出力を呼び出し元のメイン・プロセスに転送することもできる。通常、ForwardedErrorChannel を使用するが、ForwardedOutputChannel も存在する。GUIアプリケーションでは、チャンネル転送を使用するのは一般的に悪い考えであることに注意してほしい。
ある種のプロセスは、動作するために特別な環境設定を必要とする。setProcessEnvironment() を呼び出すことで、プロセスの環境変数を設定できる。作業ディレクトリを設定するには、setWorkingDirectory() を呼び出します。デフォルトでは、プロセスは呼び出し元プロセスの現在の作業ディレクトリで実行される。
QProcessで起動されたGUIアプリケーションに属するウィンドウの位置と画面のZオーダーは、基盤となるウィンドウ・システムによって制御されます。Qt 5アプリケーションでは、-qwindowgeometry
コマンドラインオプションを使用して位置決めを指定できます。X11アプリケーションでは通常、-geometry
コマンドラインオプションを使用します。
同期プロセスAPI
QProcessは、特定のシグナルが発せられるまで呼び出し元のスレッドを一時停止することで、イベントループなしで使用できるようにする一連の関数を提供しています:
- waitForStarted() はプロセスが開始するまでブロックする。
- waitForReadyRead() は、プロセスが開始するまでブロックする。
- waitForBytesWritten() は、1ペイロードのデータがプロセスに書き込まれるまでブロックする。
- 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();
QBuffer 、QFile 、QTcpSocketも参照して ください。
メンバ型のドキュメント
QProcess::CreateProcessArgumentModifier
注: この型定義は、デスクトップWindowsでのみ利用可能です。
Windows では、QProcess は Win32 API 関数CreateProcess
を使用して子プロセスを開始します。QProcess CreateProcessArgumentModifier
setCreateProcessArgumentsModifier
は、プラットフォームの詳細を気にすることなくプロセスを開始する快適な方法を提供するが、 に渡されるパラメータを微調整することが望ましい場合もある。CreateProcess
CreateProcessArgumentModifier
関数は、CreateProcessArguments
構造体へのポインタという1つのパラメー タを受け取る。この構造体のメンバは、CreateProcessArgumentModifier
関数が呼び出された後にCreateProcess
に渡される。
次の例では、カスタム・フラグをCreateProcess
に渡す方法を示します。コンソール・プロセス A からコンソール・プロセス B を起動する場合、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 メインプロセスの入力を実行中のプロセスに転送する。子プロセスは、メイン・プロセスと同じソースから標準入力を読み込む。子プロセスの実行中に、メイン・プロセスが標準入力を読もうとして はならないことに注意すること。 |
setInputChannelMode()も参照のこと 。
enum QProcess::ProcessChannel
この列挙型は、実行中のプロセスが使用するプロセス・チャネルを記述する。これらの値のいずれかをsetReadChannel() に渡すと、QProcess の現在の読み取りチャネルが設定される。
定数 | 値 | 説明 |
---|---|---|
QProcess::StandardOutput | 0 | 実行中のプロセスの標準出力(stdout)。 |
QProcess::StandardError | 1 | 実行中のプロセスの標準エラー(stderr)。 |
setReadChannel()も参照のこと 。
enum QProcess::ProcessChannelMode
この列挙型は、QProcess のプロセス出力チャネル・モードを記述する。setProcessChannelMode() にこれらの値の 1 つを渡すと、現在の読み取りチャネル・モードが設定される。
定数 | 値 | 説明 |
---|---|---|
QProcess::SeparateChannels | 0 | QProcess 実行中のプロセスの出力を管理し、標準出力と標準エラー・データを別々の内部バッファに保持します。 () を呼び出すことで、 の現在の読み取りチャネルを選択できる。これは、 のデフォルト・チャネル・モードである。setReadChannel QProcess 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()も参照してください 。
[since 6.6]
enum class QProcess::UnixProcessFlag
flags QProcess::UnixProcessFlags
これらのフラグはUnixProcessParameters のflags
フィールドで使用できます。
定数 | 値 | 説明 |
---|---|---|
QProcess::UnixProcessFlag::CloseFileDescriptors | 0x0010 | lowestFileDescriptorToClose で定義されたしきい値以上のファイルディスクリプタをすべて閉じ、親プロセスで現在開いているディスクリプタが誤って子プロセスに漏れるのを防ぎます。stdin 、stdout 、stderr のファイル記述子は決して閉じられない。 |
QProcess::UnixProcessFlag::CreateNewSession (since Qt 6.7) | 0x0040 | setsid(2) を呼び出して、新しいプロセス・セッションを開始する。これにより、子プロセスは、現プロセスのセッションより長生きできる。これは、startDetached() がプロセスを切り離すために行うステップの1つであり、プロセスをデーモン化するステッ プの1つでもある。 |
QProcess::UnixProcessFlag::DisconnectControllingTerminal (since Qt 6.7) | 0x0080 | プロセスが制御端末を持っている場合、その端末からの切断を要求する。プロセスが制御端末を持っていない場合は、何も起こらない。制御端末に接続されたままのプロセスは、端末が閉じると Hang Up (SIGHUP ) シグナルを受け取るか、他の端末制御シグナル (SIGTSTP ,SIGTTIN ,SIGTTOU ) のいずれかを受け取ります。CreateNewSession オペレーティング・システムによっては、プロセスがセッション・リーダーである場合にのみ、制御端末から切断することができる。このように、これはプロセスをデーモン化するステップの1つである。 |
QProcess::UnixProcessFlag::IgnoreSigPipe | 0x0002 | ResetSignalHandlers フラグが設定されていても、常にSIGPIPE シグナルを無視 (SIG_IGN ) に設定する。デフォルトでは、それぞれのチャネルがQProcess::closeReadChannel() で閉じられた後に、 子プロセスが標準出力または標準エラーに書き込みを行おうとすると、SIGPIPE シグナルを受け取って即座に終了する。 |
QProcess::UnixProcessFlag::ResetIds (since Qt 6.7) | 0x0100 | 現在のプロセスが保持している有効なユーザーIDまたはグループIDを削除する (setuid(2) とsetgid(2) を参照、さらにQCoreApplication::setSetuidAllowed() を参照)。これは、現在のプロセスが setuid または setgid されていて、子プロセスに昇格した特権を保持させたくない場合に便利である。 |
QProcess::UnixProcessFlag::ResetSignalHandlers | 0x0001 | すべてのUnixシグナル・ハンドラをデフォルト状態にリセットする(つまり、SIG_DFL をsignal(2) に渡す)。このフラグは、無視された (SIG_IGN ) シグナルが子プロセスの動作に影響を与えないようにするために有用である。 |
QProcess::UnixProcessFlag::UseVFork | 0x0020 | 子プロセスを開始するためにQProcess がvfork(2) を使用するように要求する。このフラグは、setChildProcessModifier() で設定されたコールバック関数が、vfork(2) の子プロセス側で実行しても安全であることを示すために使用する。 つまり、コールバック関数は、非ローカル変数を (直接または呼び出す関数を通して) 変更したり、親プロセスとの通信を試みたりしない。QProcess が実際にvfork(2) を使用するかどうか、またvfork(2) が標準のfork(2) と異なるかどうかは、実装によって決まります。 |
この列挙型はQt 6.6で導入されました。
UnixProcessFlags 型はQFlags<UnixProcessFlag> の typedef です。UnixProcessFlag値のORの組み合わせを格納します。
setUnixProcessParameters() およびunixProcessParameters()も参照 。
メンバ関数ドキュメント
[explicit]
QProcess::QProcess(QObject *parent = nullptr)
与えられたparent で QProcess オブジェクトを構築します。
[virtual noexcept]
QProcess::~QProcess()
QProcess オブジェクトを破棄します。
この関数は、プロセスが終了するまで返されないことに注意してください。
QStringList QProcess::arguments() const
プロセスが最後に開始されたコマンドライン引数を返します。
setArguments() およびstart()も参照 。
[override virtual]
qint64 QProcess::bytesToWrite() const
再インプリメントです:QIODevice::bytesToWrite() const.
[since 6.0]
std::function<void ()> QProcess::childProcessModifier() const
setChildProcessModifier() を呼び出して設定したモディファイア関数を返す。
注意: この関数は Unix プラットフォームでのみ利用可能です。
この関数は Qt 6.0 で導入されました。
setChildProcessModifier() およびunixProcessParameters()も参照してください 。
[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 プラットフォームでのみ使用可能です。
setCreateProcessArgumentsModifier() およびQProcess::CreateProcessArgumentModifier も参照 。
QProcess::ProcessError QProcess::error() const
最後に発生したエラーの種類を返します。
state()も参照 。
[signal]
void QProcess::errorOccurred(QProcess::ProcessError error)
このシグナルは、プロセスでエラーが発生したときに発行されます。指定されたerror には、発生したエラーのタイプが記述されます。
[static]
int QProcess::execute(const QString &program, const QStringList &arguments = {})
引数arguments を持つプログラムprogram を新しいプロセスで起動し、その終了を待ってから、そのプロセスの終了コードを返す。新しいプロセスがコンソールに書き込んだデータは、呼び出し元のプロセスに転送される。
環境と作業ディレクトリは、呼び出し元のプロセスから継承される。
引数の扱いは、それぞれのstart() オーバーロードと同じである。
プロセスが開始できない場合、-2が返される。プロセスがクラッシュした場合、-1 が返される。それ以外の場合は、プロセスの終了コードが返される。
start()も参照 。
int QProcess::exitCode() const
最後に終了したプロセスの終了コードを返します。
この値は、exitStatus() がNormalExit を返さない限り無効です。
QProcess::ExitStatus QProcess::exitStatus() const
最後に終了したプロセスの終了ステータスを返します。
Windows では、プロセスが他のアプリケーションから TerminateProcess() で終了された場合でも、終了コードが 0 未満でない限り、この関数はNormalExit を返します。
[noexcept, since 6.7]
void QProcess::failChildProcessModifier(const char *description, int error = 0)
この関数は、setChildProcessModifier() で設定された修飾子の内部で、エラー状態に遭遇したことを示すために使用できます。モディファイアがこれらの関数を呼び出すと、QProcess は親プロセスでコードQProcess::FailedToStart を持つerrorOccurred() を発行します。description を使用して、問題の診断に役立つ情報をerrorString() に含めることができる。通常は、C ライブラリ関数perror()
と同様に、失敗した呼び出しの名前である。さらに、error パラメータには、<errno.h>
エラーコードを指定することができ、そのテキスト形式も含めることができる。
例えば、子プロセス修飾子は、子プロセスのために追加のファイル記述子を準備することができる:
process.setChildProcessModifier([fd, &process]() { if (dup2(fd, TargetFileDescriptor) < 0) process.failChildProcessModifier(errno, "aux comm channel"); }); process.start();
fd
は、親プロセスで現在開いているファイル記述子である。dup2()
システム・コールの結果、EBADF
状態になった場合、プロセスerrorString() は "Child process modifier reported error: aux comm channel:不正なファイル記述子" となる。
この関数は呼び出し元には戻りません。子プロセス・モディファイアと正しいQProcess オブジェクト以外でのこの関数の使用は、未定義の動作です。
注意: この実装では、description パラメータに約 500 文字までの長さ制限を課しています。これには、error コードからのテキストは含まれません。
この関数は Qt 6.7 で導入されました。
setChildProcessModifier() およびsetUnixProcessParameters()も参照してください 。
[signal]
void QProcess::finished(int exitCode, QProcess::ExitStatus exitStatus = NormalExit)
このシグナルはプロセスが終了したときに発せられます。exitCode はプロセスの終了コード(通常の終了に対してのみ有効)、exitStatus は終了ステータスです。プロセスが終了した後も、QProcess のバッファはそのままです。プロセスが終了する前に書き込まれたデータを読むことができる。
exitStatus()も参照のこと 。
QProcess::InputChannelMode QProcess::inputChannelMode() const
QProcess 標準入力チャネルのチャネル・モードを返す。
setInputChannelMode() およびInputChannelMode も参照 。
[override virtual]
bool QProcess::isSequential() const
再インプリメント:QIODevice::isSequential() const.
[slot]
void QProcess::kill()
現在のプロセスを強制終了し、直ちに終了させます。
Windows では kill() は TerminateProcess を使用し、Unix および macOS では SIGKILL シグナルがプロセスに送信されます。
terminate()も参照 。
QString QProcess::nativeArguments() const
プログラムの追加のネイティブ・コマンド行引数を返します。
注意: この関数は、Windowsプラットフォームでのみ使用できます。
setNativeArguments()も参照 。
[static]
QString QProcess::nullDevice()
オペレーティング・システムのヌル・デバイス。
返されるファイル・パスは、ネイティブのディレクトリ区切り文字を使用します。
QProcess::setStandardInputFile()、QProcess::setStandardOutputFile()、およびQProcess::setStandardErrorFile() も参照 。
[override virtual]
bool QProcess::open(QIODeviceBase::OpenMode mode = ReadWrite)
再インプリメント:QIODevice::open(QIODeviceBase::OpenMode mode).
setArguments() によって設定された引数で、setProgram() によって設定されたプログラムを開始します。OpenMode はmode に設定されます。
このメソッドはstart() のエイリアスであり、QIODevice で定義されたインタフェースを完全に実装するためだけに存在する。
プログラムが開始された場合はtrue
を返す。
start()、setProgram() およびsetArguments()も参照 。
QProcess::ProcessChannelMode QProcess::processChannelMode() const
QProcess 標準出力および標準エラー・チャネルのチャネル・モードを返す。
setProcessChannelMode()、ProcessChannelMode 、およびsetReadChannel() も参照 。
QProcessEnvironment QProcess::processEnvironment() const
QProcess が子プロセスに渡す環境を返します。setProcessEnvironment() を使用して環境が設定されていない場合、このメソッドは、環境が親から継承されることを示すオブジェクトを返します。
setProcessEnvironment()、QProcessEnvironment::inheritsFromParent() およびEnvironment variablesも参照してください 。
qint64 QProcess::processId() const
実行中のプロセスのネイティブ・プロセス識別子があれば、それを返します。現在実行中のプロセスがない場合は、0
が返される。
QString QProcess::program() const
プロセスが最後に起動されたプログラムを返します。
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)。
[private signal]
void QProcess::readyReadStandardError()
このシグナルは、プロセスが標準エラー・チャネル (stderr
) から新しいデータを利用可能にしたときに発せられる。現在のread channel に関係なく発せられる。
注意: これはプライベート・シグナルです。シグナル接続で使用することはできますが、ユーザーが発することはできません。
readAllStandardError() およびreadChannel()も参照 。
[private signal]
void QProcess::readyReadStandardOutput()
このシグナルは、プロセスが新しいデータを標準出力チャネル(stdout
)から利用できるようにしたときに発せられる。このシグナルは、現在のread channel に関係なく発せられる。
注意: これはプライベート・シグナルである。シグナル接続で使用することはできますが、ユーザーが発することはできません。
readAllStandardOutput() およびreadChannel()も参照してください 。
void QProcess::setArguments(const QStringList &arguments)
プロセスの開始時に、呼び出されたプログラムに渡すarguments を設定します。この関数はstart() の前に呼び出す必要があります。
start()、setProgram()、arguments() も参照 。
[since 6.0]
void QProcess::setChildProcessModifier(const std::function<void ()> &modifier)
setCreateProcessArgumentsModifier子プロセスのmodifier 関数を設定する。Unix システムの場合(macOS を含む)。modifier 引数に含まれる関数は、fork()
またはvfork()
が完了し、QProcess が子プロセスの標準ファイル記述子をセットアップした後、execve()
、start() 内の前に、子プロセスで呼び出される。
以下に、子プロセスを特権なしで実行するように設定する例を示す:
void runSandboxed(const QString &name, const QStringList &arguments) { QProcess proc; proc.setChildProcessModifier([] { // Drop all privileges in the child process, and enter // a chroot jail. ::setgroups(0, nullptr); ::chroot("/run/safedir"); ::chdir("/"); ::setgid(safeGid); ::setuid(safeUid); ::umask(077); }); proc.start(name, arguments); proc.waitForFinished(); }
修飾関数に失敗条件が発生した場合、failChildProcessModifier() を使用して、QProcess 呼び出し元に状況を報告することができます。あるいは、_exit()
やabort()
のような、プロセスを停止する他の方法を使用することもできる。
余計なファイル記述子をすべて閉じたり、制御している TTY との接続を切断したりといった子プロセスの特定のプロパティは、失敗を検出してFailedToStart 状態を報告するsetUnixProcessParameters() を使用することで、より容易に実現できます。この修飾子は、追加のファイル記述子を設定するなど、子プロセスの特定の一般的でないプロパティを変更するのに便利である。子プロセス修飾子とUnixプロセス・パラメータの両方が設定されている場合、 これらのパラメータが適用される前に修飾子が実行される。
注意: マルチスレッドアプリケーションでは、この関数は他のスレッドで使用中のミューテックスをロックする可能性のある関数を呼び出さないように注意する必要があります(一般的に、POSIX で "async-signal-safe" として定義されている関数のみを使用することをお勧めします)。Qt API のほとんどは、qDebug() を含め、このコールバック内部では安全ではなく、デッドロックにつながる可能性があります。
注意: UnixProcessParameters::UseVFork フラグがsetUnixProcessParameters() で設定されている場合、QProcess は子プロセスを開始するためにvfork()
セマンティクスを使用する可能性があるため、この関数はさらに厳しい制約に従わなければなりません。第一に、この関数はまだ親プロセスとメモリを共有しているため、非ローカル変数に書き込んではならず、データ競合を回避するために、変数から読み出す際には適切な順序セマンティクスに従わなければなりません。第2に、さらに多くのライブラリ関数が誤動作する可能性があります。したがって、この関数は、read()
、write()
、setsid()
、nice()
などの低レベルのシステムコールのみを使用する必要があります。
この関数はQt 6.0で導入されました。
childProcessModifier(),failChildProcessModifier(),setUnixProcessParameters()も参照してください 。
void QProcess::setCreateProcessArgumentsModifier(QProcess::CreateProcessArgumentModifier modifier)
CreateProcess
Win32 API 呼び出しのmodifier を設定します。以前に設定したものを削除するにはQProcess::CreateProcessArgumentModifier()
を渡します。
注意: この関数は Windows プラットフォームでのみ使用可能で、C++11 が必要です。
createProcessArgumentsModifier()、QProcess::CreateProcessArgumentModifier 、およびsetChildProcessModifier()も参照 。
void QProcess::setInputChannelMode(QProcess::InputChannelMode mode)
QProcess 標準入力チャネルのチャネル・モードを、指定されたmode に設定する。このモードは、次にstart() が呼び出されたときに使用されます。
inputChannelMode() およびInputChannelModeも参照 。
void QProcess::setNativeArguments(const QString &arguments)
これはオーバーロードされた関数です。
プログラムのネイティブ・コマンド・ラインarguments を追加設定する。
サブプロセスにコマンド行arguments を渡すシステムAPIがネイティブに単一の文字列を使用するオペレーティング・システムでは、QProcess のポータブル・リスト・ベースのAPIでは渡せないコマンド行が考えられる。そのような場合、この関数を使用して、通常の引数リストから構成される文字列に、区切りのスペースを追加した文字列を設定しなければならない。
注意: この関数はWindowsプラットフォームでのみ使用可能である。
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();
processChannelMode()、ProcessChannelMode 、およびsetReadChannel()も 参照。
void QProcess::setProcessEnvironment(const QProcessEnvironment &environment)
QProcess が子プロセスに渡すenvironment を設定する。
例えば、以下のコードは環境変数TMPDIR
を追加する:
QProcess process; QProcessEnvironment env = QProcessEnvironment::systemEnvironment(); env.insert("TMPDIR", "C:\\MyApp\\temp"); // Add an environment variable process.setProcessEnvironment(env); process.start("myapp");
Windowsでは、環境変数名の大文字と小文字は区別されないことに注意。
processEnvironment()、QProcessEnvironment::systemEnvironment()、Environment variablesも参照のこと 。
[protected]
void QProcess::setProcessState(QProcess::ProcessState state)
QProcess の現在の状態を、指定されたstate に設定する。
state()も参照 。
void QProcess::setProgram(const QString &program)
プロセスの開始時に使用するprogram を設定する。この関数は、start() の前に呼び出す必要がある。
program が絶対パスの場合、起動される実行ファイルを正確に指定します。相対パスは、PATH
環境変数を検索するなど、プラットフォーム固有の方法で解決される(詳細はFinding the Executable を参照)。
start()、setArguments()、program()、QStandardPaths::findExecutable()も参照 。
void QProcess::setReadChannel(QProcess::ProcessChannel channel)
QProcess の現在の読み取りチャネルを、指定されたchannel に設定する。現在の入力チャネルは、関数read()、readAll()、readLine()、およびgetChar() で使用される。また、どのチャネルをトリガとしてQProcess がreadyRead() を発行するかも決定される。
readChannel()も参照 。
void QProcess::setStandardErrorFile(const QString &fileName, QIODeviceBase::OpenMode mode = Truncate)
プロセスの標準エラーをファイルfileName にリダイレクトする。リダイレクトが行われると、標準エラー読み込みチャネルは閉じられる。read() を使用した読み込みは、readAllStandardError() と同様、常に失敗する。mode が Append の場合、ファイルは追加され、そうでない場合は切り捨てられる。
ファイルのオープン方法の詳細については、setStandardOutputFile() を参照のこと。
注意:QProcess::MergedChannels を引数としてsetProcessChannelMode() が呼び出された場合、この関数は無効である。
setStandardInputFile()、setStandardOutputFile()、setStandardOutputProcess()も参照 。
void QProcess::setStandardInputFile(const QString &fileName)
プロセスの標準入力を、fileName で指定されたファイルにリダイレクトする。入力のリダイレクトが行われている場合、QProcess オブジェクトは読み取り専用モードになる (write() を呼び出すとエラーになる)。
プロセスにEOFをすぐに読ませるには、nullDevice()をここに渡す。これは、処理を開始する前に設定できるため、データを書き込む前にcloseWriteChannel() を使用するよりもクリーンである。
start() を呼び出した時点でファイルfileName が存在しなかったり、読めなかったりすると、プロセスの開始は失敗する。
プロセス開始後に setStandardInputFile() を呼び出しても、何の効果もない。
setStandardOutputFile()、setStandardErrorFile()、setStandardOutputProcess()も参照 。
void QProcess::setStandardOutputFile(const QString &fileName, QIODeviceBase::OpenMode mode = Truncate)
プロセスの標準出力をファイルfileName にリダイレクトする。リダイレクトが行われると、標準出力の読み取りチャネルは閉じられる。read() を使用した読み取りは、readAllStandardOutput() と同様に、常に失敗する。
プロセスからの標準出力をすべて破棄するには、ここでnullDevice() を渡す。これは、QProcess バッファが満たされないため、単に標準出力を読まないよりも効率的である。
start() が呼び出された時点でファイルfileName が存在しなければ、それが作成される。作成できない場合、開始は失敗する。
ファイルが存在し、mode が QIODevice::Truncate の場合、ファイルは切り捨てられる。そうでない場合(mode が QIODevice::Append の場合)、ファイルは追加されます。
プロセス開始後に setStandardOutputFile()を呼び出しても効果はありません。
fileName が空文字列の場合、標準出力のリダイレクトを停止します。これは、リダイレクト後に標準出力を復元するのに便利である。
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");
[since 6.6]
void QProcess::setUnixProcessParameters(const QProcess::UnixProcessParameters ¶ms)
Unixシステム上の子プロセスの追加設定とパラメータをparams に設定する。この関数は、ターゲット実行ファイルを起動する前に、QProcess に子プロセスの修正を依頼するために使用できます。
この関数を使用すると、余計なファイル記述子をすべて閉じたり、子プロセスのナイス・レベルを変更したり、制御している TTY との接続を切断したりするなど、子プロセスの特定のプロパティを変更できます。子プロセスをより細かく制御したり、他の方法で変更したりするには、setChildProcessModifier() 関数を使用する。子プロセス修飾子とUnixプロセス・パラメータの両方が設定されている場合、 これらのパラメータが適用される前に修飾子が実行されます。
注意: この関数は Unix プラットフォームでのみ使用できます。
この関数は Qt 6.6 で導入されました。
unixProcessParameters() およびsetChildProcessModifier()も参照してください 。
[since 6.6]
void QProcess::setUnixProcessParameters(QProcess::UnixProcessFlags flagsOnly)
これはオーバーロードされた関数です。
Unix システム上の子プロセスの追加設定をflagsOnly に設定します。これはflags
フィールドだけを設定したオーバーロードと同じです。
注意: この関数は Unix プラットフォームでのみ使用できます。
この関数は Qt 6.6 で導入されました。
unixProcessParameters() およびsetChildProcessModifier()も参照してください 。
void QProcess::setWorkingDirectory(const QString &dir)
作業ディレクトリをdir に設定します。QProcess は、このディレクトリでプロセスを開始します。デフォルトの動作は、呼び出したプロセスの作業ディレクトリでプロセスを開始します。
workingDirectory() およびstart()も参照して ください。
[static]
QStringList QProcess::splitCommand(QStringView command)
文字列command をトークンのリストに分割し、そのリストを返す。
空白を含むトークンは、二重引用符で囲むことができる。二重引用符を 3 つ連続させると、引用符文字そのものを表す。
void QProcess::start(const QString &program, const QStringList &arguments = {}, QIODeviceBase::OpenMode mode = ReadWrite)
指定されたprogram を新しいプロセスで開始し、arguments でコマンドライン引数を渡す。QProcess が実行する実行ファイルをどのように検索するかについては、setProgram() を参照のこと。OpenMode はmode に設定されます。引数の分割は行われません。
QProcess オブジェクトは直ちに Starting 状態に入る。errorOccurredプロセスが正常に開始すると、QProcess からstarted() が発行される。同期的に子プロセスを開始できるプラットフォーム(特にWindows)では、この関数が戻る前にこれらのシグナルが発せられ、このQProcess オブジェクトはそれぞれQProcess::Running またはQProcess::NotRunning 状態に遷移することに注意してください。その他の形式では、started() およびerrorOccurred() シグナルは遅延する。
waitForStarted() を呼び出して、プロセスが開始し(または開始できなかった)、これらのシグナルが発せられたことを確認する。プロセスの開始状態が既知の場合でも、この関数を呼び出すことは安全である。
Windowsの場合:Windows: 引数は引用符で囲まれ、CommandLineToArgvW()
Windows関数と互換性のあるコマンドラインに結合される。コマンドラインのクォート要件が異なるプログラムでは、setNativeArguments() を使用する必要がある。CommandLineToArgvW()
の規則に従わない特筆すべきプログラムとして、cmd.exe があり、その結果、すべてのバッチ・スクリプトがあります。
QProcess オブジェクトがすでにプロセスを実行している場合、コンソールに警告が表示されることがあるが、既存のプロセスは影響を受けずに実行を継続する。
注意: 子プロセスの起動に成功したということは、オペレーティング・システムがプロセスの作成に成功し、プロセスIDなどの各プロセスが持つリソースを割り当てたことを意味します。子プロセスは、非常に早い段階でクラッシュしたり失敗したりする可能性があり、 その結果、期待した出力を得られないかもしれない。ほとんどのオペレーティング・システムでは、これにはダイナミック・リンク・エラーが含まれる。
processId()、started()、waitForStarted()、setNativeArguments()も参照のこと 。
void QProcess::start(QIODeviceBase::OpenMode mode = ReadWrite)
これはオーバーロードされた関数である。
setArguments() で設定された引数で、setProgram() で設定されたプログラムを起動する。OpenMode はmode に設定されます。
open()、setProgram()、setArguments()も参照 。
[since 6.0]
void QProcess::startCommand(const QString &command, QIODeviceBase::OpenMode mode = ReadWrite)
コマンドcommand を新しいプロセスで起動します。OpenMode はmode に設定されます。
command は、プログラム名と引数の両方を含む単一の文字列です。引数は 1 つ以上のスペースで区切られる。例えば
QProcess process; process.startCommand("del /s *.txt"); // same as process.start("del", QStringList() << "/s" << "*.txt"); ...
スペースを含む引数を新しいプロセスに正しく供給するには、引用符で囲む必要があります。例えば
QProcess process; process.startCommand("dir \"My Documents\"");
command 、文字列の引用符は三重引用符で囲まれる。例えば、以下のようになる:
QProcess process; process.startCommand("dir \"Epic 12\"\"\" Singles\"");
command 文字列を分割して引用符を外した後、この関数はstart() のように動作する。
サブプロセスにコマンドライン引数を渡すシステムAPIが、ネイティブに単一 の文字列を使用するオペレーティング・システム(Windows)では、QProcess のポータブル・リスト・ベースのAPIでは渡せないコマンドラインも考えら れる。このような稀なケースでは、この関数の代わりにsetProgram() やsetNativeArguments() を使用する必要があります。
この関数は Qt 6.0 で導入されました。
splitCommand() およびstart()も参照して ください。
bool QProcess::startDetached(qint64 *pid = nullptr)
setArguments() によって設定された引数で、setProgram() によって設定されたプログラムを新しいプロセスで開始し、そのプロセスから切り離します。成功した場合はtrue
を返し、そうでない場合はfalse
を返す。呼び出し元のプロセスが終了しても、切り離されたプロセスは影響を受けずに実行を継続する。
Unix:開始されたプロセスは、それ自身のセッションで実行され、デーモンのように動作する。
プロセスは、setWorkingDirectory() で設定されたディレクトリで開始される。workingDirectory() が空の場合、作業ディレクトリは呼び出し元のプロセスから継承される。
この関数が成功すると、 *pid に開始されたプロセスのプロセス識別子が設定され、そうでない場合は -1 が設定される。子プロセスが終了し、PIDが予告なく無効になる可能性があることに注意。さらに、子プロセスが終了した後、同じPIDがリサイクルされ、まったく別のプロセスで使用されるかもしれない。この変数を使用する場合、特にオペレーティング・システムの手段で強制的にプロセスを終了させようとする場合は、ユーザー・コードは注意すべきである。
startDetached() がサポートしているプロパティ・セッタは、以下のものだけである:
- setArguments()
- setCreateProcessArgumentsModifier()
- setNativeArguments()
- setProcessEnvironment()
- setProgram()
- setStandardErrorFile()
- setStandardInputFile()
- setStandardOutputFile()
- setProcessChannelMode(QProcess::MergedChannels)
- setStandardOutputProcess()
- setWorkingDirectory()
QProcess オブジェクトの他のプロパティはすべて無視される。
注意: 呼び出されたプロセスは、呼び出されたプロセスのコンソール・ウィンドウを継承する。コンソール出力を抑制するには、標準/エラー出力をQProcess::nullDevice() にリダイレクトします。
start() およびstartDetached(const QString &program, const QStringList &arguments, const QString &workingDirectory, qint64 *pid)も参照してください 。
[static]
bool QProcess::startDetached(const QString &program, const QStringList &arguments = {}, const QString &workingDirectory = QString(), qint64 *pid = nullptr)
この関数は startDetached() をオーバーロードする。
引数arguments を持つプログラムprogram を新しいプロセスで起動し、そのプロセスからデタッチする。成功すればtrue
を返し、そうでなければfalse
を返す。呼び出し元のプロセスが終了しても、切り離されたプロセスは影響を受けずに実行を継続する。
引数の扱いは、start() のオーバーロードと同じである。
プロセスは、ディレクトリworkingDirectory で開始される。workingDirectory が空の場合、作業ディレクトリは呼び出し元のプロセスから継承される。
この関数が成功すると、 *pid に開始されたプロセスのプロセス識別子が設定される。
start()も参照のこと 。
[private signal]
void QProcess::started()
このシグナルは、プロセスが開始したときにQProcess によって発せられ、state() はRunning を返す。
注意: これはプライベート・シグナルである。シグナル接続で使用することはできますが、ユーザが発することはできません。
QProcess::ProcessState QProcess::state() const
プロセスの現在の状態を返します。
stateChanged() およびerror()も参照 。
[private signal]
void QProcess::stateChanged(QProcess::ProcessState newState)
このシグナルは、QProcess の状態が変化するたびに発行される。引数newState は、QProcess が変更された状態である。
注意: これはプライベート・シグナルである。シグナル接続で使用することはできますが、ユーザーが発することはできません。
[static]
QStringList QProcess::systemEnvironment()
呼び出し元のプロセスの環境を key=value ペアのリストとして返します。例
QStringList environment = QProcess::systemEnvironment(); // environment = {"PATH=/usr/bin:/usr/local/bin", // "USER=greg", "HOME=/home/greg"}
例:この関数はシステム環境をキャッシュしません。したがって、setenv
やputenv
のような低レベルのCライブラリ関数が呼び出された場合、更新されたバージョンの環境を取得することが可能です。
ただし、この関数を繰り返し呼び出すと、環境変数のリストが再作成されることに注意。
注: 新しいコードでは、QProcessEnvironment::systemEnvironment ()を使うことを推奨する。
QProcessEnvironment::systemEnvironment() およびsetProcessEnvironment()も参照の こと。
[slot]
void QProcess::terminate()
プロセスの終了を試みる。
この関数を呼び出した結果、プロセスが終了することはない(未保存のファイルについて ユーザに確認する機会が与えられるなど)。
Windowsでは、terminate()はプロセスのすべてのトップレベル・ウィンドウにWM_CLOSEメッセージをポストし、その後プロセス自体のメイン・スレッドにポストする。UnixとmacOSでは、SIGTERM
シグナルが送信される。
イベント・ループを実行しない、またはイベント・ループがWM_CLOSEメッセージを処理しないWindows上のコンソール・アプリケーションは、kill ()を呼び出すことによってのみ終了させることができる。
kill()も参照 。
[noexcept, since 6.6]
QProcess::UnixProcessParameters QProcess::unixProcessParameters() const
Unix システムで子プロセスに適用される追加のフラグと設定を記述したUnixProcessParameters オブジェクトを返します。デフォルトの設定は、デフォルトで構築されたUnixProcessParameters に対応する。
注意: この関数は Unix プラットフォームでのみ利用可能です。
この関数は Qt 6.6 で導入されました。
setUnixProcessParameters() およびchildProcessModifier()も参照してください 。
[override virtual]
bool QProcess::waitForBytesWritten(int msecs = 30000)
再インプリメント:QIODevice::waitForBytesWritten(int msecs).
bool QProcess::waitForFinished(int msecs = 30000)
プロセスが終了してfinished() シグナルが発せられるか、msecs ミリ秒が経過するまでブロックします。
処理が終了した場合はtrue
を返し、そうでない場合はfalse
を返す(処理がタイムアウトした場合、エラーが発生した場合、またはこのQProcess がすでに終了している場合)。
この関数はイベントループなしで動作する。非GUIアプリケーションを書くときや、非GUIスレッドでI/O操作を実行するときに便利です。
警告 メイン(GUI)スレッドからこの関数を呼び出すと、ユーザー・インターフェースがフリーズする可能性があります。
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
を返す(操作がタイムアウトした場合、またはエラーが発生した場合)。この関数を実行する前にすでにプロセスが正常に開始されていた場合は、即座に返される。
この関数はイベント・ループなしで動作する。非GUIアプリケーションを書くときや、非GUIスレッドでI/O操作を行うときに便利です。
警告 メイン(GUI)スレッドからこの関数を呼び出すと、ユーザー・インターフェースがフリーズする可能性があります。
msecsが-1の場合、この関数はタイムアウトしません。
started()、waitForReadyRead()、waitForBytesWritten()、waitForFinished()も参照のこと 。
QString QProcess::workingDirectory() const
QProcess に作業ディレクトリが割り当てられている場合、この関数は、プログラム開始前にQProcess が入る作業ディレクトリを返す。そうでない場合 (つまり、ディレクトリが割り当てられていない場合)は、空の文字列が返され、QProcess がアプリケーションの現在の作業ディレクトリを代わりに使用する。
setWorkingDirectory()も参照してください 。
©2024 The Qt Company Ltd. 本書に含まれる文書の著作権は、それぞれの所有者に帰属します。 本書で提供されるドキュメントは、Free Software Foundation が発行したGNU Free Documentation License version 1.3に基づいてライセンスされています。 Qtおよびそれぞれのロゴは、フィンランドおよびその他の国におけるThe Qt Company Ltd.の 商標です。その他すべての商標は、それぞれの所有者に帰属します。