Qt 6.x
The Qt SDK
Loading...
Searching...
No Matches
qprocess.h
Go to the documentation of this file.
1// Copyright (C) 2016 The Qt Company Ltd.
2// Copyright (C) 2023 Intel Corporation.
3// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR LGPL-3.0-only OR GPL-2.0-only OR GPL-3.0-only
4
5#ifndef QPROCESS_H
6#define QPROCESS_H
7
8#include <QtCore/qiodevice.h>
9#include <QtCore/qstringlist.h>
10#include <QtCore/qshareddata.h>
11
12#include <functional>
13
14QT_REQUIRE_CONFIG(processenvironment);
15
16#if defined(Q_OS_WIN) || defined(Q_QDOC)
17struct _PROCESS_INFORMATION;
18struct _SECURITY_ATTRIBUTES;
19struct _STARTUPINFOW;
20using Q_PROCESS_INFORMATION = _PROCESS_INFORMATION;
21using Q_SECURITY_ATTRIBUTES = _SECURITY_ATTRIBUTES;
22using Q_STARTUPINFO = _STARTUPINFOW;
23#endif
24
26
27class QProcessPrivate;
29
30class Q_CORE_EXPORT QProcessEnvironment
31{
32public:
33 enum Initialization { InheritFromParent };
34
36 QProcessEnvironment(Initialization) noexcept;
39 QT_MOVE_ASSIGNMENT_OPERATOR_IMPL_VIA_PURE_SWAP(QProcessEnvironment)
41
42 void swap(QProcessEnvironment &other) noexcept { d.swap(other.d); }
43
44 bool operator==(const QProcessEnvironment &other) const;
45 inline bool operator!=(const QProcessEnvironment &other) const
46 { return !(*this == other); }
47
48 bool isEmpty() const;
49 [[nodiscard]] bool inheritsFromParent() const;
50 void clear();
51
52 bool contains(const QString &name) const;
53 void insert(const QString &name, const QString &value);
54 void remove(const QString &name);
55 QString value(const QString &name, const QString &defaultValue = QString()) const;
56
58
59 QStringList keys() const;
60
61 void insert(const QProcessEnvironment &e);
62
63 static QProcessEnvironment systemEnvironment();
64
65private:
66 friend class QProcessPrivate;
69};
70
71Q_DECLARE_SHARED(QProcessEnvironment)
72
73#if QT_CONFIG(process)
74
75class Q_CORE_EXPORT QProcess : public QIODevice
76{
78public:
79 enum ProcessError {
80 FailedToStart,
81 Crashed,
82 Timedout,
83 ReadError,
84 WriteError,
85 UnknownError
86 };
87 Q_ENUM(ProcessError)
88
89 enum ProcessState {
90 NotRunning,
91 Starting,
93 };
94 Q_ENUM(ProcessState)
95
96 enum ProcessChannel {
97 StandardOutput,
98 StandardError
99 };
100 Q_ENUM(ProcessChannel)
101
102 enum ProcessChannelMode {
103 SeparateChannels,
104 MergedChannels,
105 ForwardedChannels,
106 ForwardedOutputChannel,
107 ForwardedErrorChannel
108 };
109 Q_ENUM(ProcessChannelMode)
110
111 enum InputChannelMode {
112 ManagedInputChannel,
113 ForwardedInputChannel
114 };
115 Q_ENUM(InputChannelMode)
116
117 enum ExitStatus {
118 NormalExit,
119 CrashExit
120 };
121 Q_ENUM(ExitStatus)
122
123 explicit QProcess(QObject *parent = nullptr);
124 virtual ~QProcess();
125
126 void start(const QString &program, const QStringList &arguments = {}, OpenMode mode = ReadWrite);
127 void start(OpenMode mode = ReadWrite);
128 void startCommand(const QString &command, OpenMode mode = ReadWrite);
129 bool startDetached(qint64 *pid = nullptr);
130 bool open(OpenMode mode = ReadWrite) override;
131
132 QString program() const;
133 void setProgram(const QString &program);
134
135 QStringList arguments() const;
136 void setArguments(const QStringList & arguments);
137
138 ProcessChannelMode processChannelMode() const;
139 void setProcessChannelMode(ProcessChannelMode mode);
140 InputChannelMode inputChannelMode() const;
141 void setInputChannelMode(InputChannelMode mode);
142
143 ProcessChannel readChannel() const;
144 void setReadChannel(ProcessChannel channel);
145
146 void closeReadChannel(ProcessChannel channel);
147 void closeWriteChannel();
148
149 void setStandardInputFile(const QString &fileName);
150 void setStandardOutputFile(const QString &fileName, OpenMode mode = Truncate);
151 void setStandardErrorFile(const QString &fileName, OpenMode mode = Truncate);
152 void setStandardOutputProcess(QProcess *destination);
153
154#if defined(Q_OS_WIN) || defined(Q_QDOC)
155 QString nativeArguments() const;
156 void setNativeArguments(const QString &arguments);
157 struct CreateProcessArguments
158 {
159 const wchar_t *applicationName;
160 wchar_t *arguments;
161 Q_SECURITY_ATTRIBUTES *processAttributes;
162 Q_SECURITY_ATTRIBUTES *threadAttributes;
163 bool inheritHandles;
164 unsigned long flags;
165 void *environment;
166 const wchar_t *currentDirectory;
167 Q_STARTUPINFO *startupInfo;
168 Q_PROCESS_INFORMATION *processInformation;
169 };
170 typedef std::function<void(CreateProcessArguments *)> CreateProcessArgumentModifier;
171 CreateProcessArgumentModifier createProcessArgumentsModifier() const;
172 void setCreateProcessArgumentsModifier(CreateProcessArgumentModifier modifier);
173#endif // Q_OS_WIN || Q_QDOC
174#if defined(Q_OS_UNIX) || defined(Q_QDOC)
175 std::function<void(void)> childProcessModifier() const;
176 void setChildProcessModifier(const std::function<void(void)> &modifier);
177 Q_NORETURN void failChildProcessModifier(const char *description, int error = 0) noexcept;
178
179 enum class UnixProcessFlag : quint32 {
180 ResetSignalHandlers = 0x0001, // like POSIX_SPAWN_SETSIGDEF
181 IgnoreSigPipe = 0x0002,
182 // some room if we want to add IgnoreSigHup or so
183 CloseFileDescriptors = 0x0010,
184 UseVFork = 0x0020, // like POSIX_SPAWN_USEVFORK
185 CreateNewSession = 0x0040, // like POSIX_SPAWN_SETSID
186 DisconnectControllingTerminal = 0x0080,
187 ResetIds = 0x0100, // like POSIX_SPAWN_RESETIDS
188 };
189 Q_DECLARE_FLAGS(UnixProcessFlags, UnixProcessFlag)
190 struct UnixProcessParameters
191 {
192 UnixProcessFlags flags = {};
193 int lowestFileDescriptorToClose = 0;
194
195 quint32 _reserved[6] {};
196 };
197 UnixProcessParameters unixProcessParameters() const noexcept;
198 void setUnixProcessParameters(const UnixProcessParameters &params);
199 void setUnixProcessParameters(UnixProcessFlags flagsOnly);
200#endif
201
202 QString workingDirectory() const;
203 void setWorkingDirectory(const QString &dir);
204
205 void setEnvironment(const QStringList &environment);
206 QStringList environment() const;
207 void setProcessEnvironment(const QProcessEnvironment &environment);
208 QProcessEnvironment processEnvironment() const;
209
210 QProcess::ProcessError error() const;
211 QProcess::ProcessState state() const;
212
213 qint64 processId() const;
214
215 bool waitForStarted(int msecs = 30000);
216 bool waitForReadyRead(int msecs = 30000) override;
217 bool waitForBytesWritten(int msecs = 30000) override;
218 bool waitForFinished(int msecs = 30000);
219
220 QByteArray readAllStandardOutput();
221 QByteArray readAllStandardError();
222
223 int exitCode() const;
224 QProcess::ExitStatus exitStatus() const;
225
226 // QIODevice
227 qint64 bytesToWrite() const override;
228 bool isSequential() const override;
229 void close() override;
230
231 static int execute(const QString &program, const QStringList &arguments = {});
232 static bool startDetached(const QString &program, const QStringList &arguments = {},
233 const QString &workingDirectory = QString(), qint64 *pid = nullptr);
234
235 static QStringList systemEnvironment();
236
237 static QString nullDevice();
238
239 static QStringList splitCommand(QStringView command);
240
241public Q_SLOTS:
242 void terminate();
243 void kill();
244
246 void started(QPrivateSignal);
247 void finished(int exitCode, QProcess::ExitStatus exitStatus = NormalExit);
248 void errorOccurred(QProcess::ProcessError error);
249 void stateChanged(QProcess::ProcessState state, QPrivateSignal);
250
251 void readyReadStandardOutput(QPrivateSignal);
252 void readyReadStandardError(QPrivateSignal);
253
254protected:
255 void setProcessState(ProcessState state);
256
257 // QIODevice
258 qint64 readData(char *data, qint64 maxlen) override;
259 qint64 writeData(const char *data, qint64 len) override;
260
261private:
262 Q_DECLARE_PRIVATE(QProcess)
263 Q_DISABLE_COPY(QProcess)
264
265#if QT_VERSION < QT_VERSION_CHECK(7,0,0)
266 // ### Qt7: Remove this struct and the virtual function; they're here only
267 // to cause build errors in Qt 5 code that wasn't updated to Qt 6's
268 // setChildProcessModifier()
269 struct Use_setChildProcessModifier_Instead {};
270 QT_DEPRECATED_X("Use setChildProcessModifier() instead")
271 virtual Use_setChildProcessModifier_Instead setupChildProcess();
272#endif
273
274 Q_PRIVATE_SLOT(d_func(), bool _q_canReadStandardOutput())
275 Q_PRIVATE_SLOT(d_func(), bool _q_canReadStandardError())
276#ifdef Q_OS_UNIX
277 Q_PRIVATE_SLOT(d_func(), bool _q_canWrite())
278#endif
279 Q_PRIVATE_SLOT(d_func(), bool _q_startupNotification())
280 Q_PRIVATE_SLOT(d_func(), void _q_processDied())
281};
282
283#ifdef Q_OS_UNIX
284Q_DECLARE_OPERATORS_FOR_FLAGS(QProcess::UnixProcessFlags)
285#endif
286
287#endif // QT_CONFIG(process)
288
290
291#endif // QPROCESS_H
IOBluetoothL2CAPChannel * channel
\inmodule QtCore
Definition qbytearray.h:57
\inmodule QtCore \reentrant
Definition qiodevice.h:34
\inmodule QtCore
Definition qobject.h:90
\inmodule QtCore
Definition qprocess.h:31
Initialization
This enum contains a token that is used to disambiguate constructors.
Definition qprocess.h:33
bool operator!=(const QProcessEnvironment &other) const
Returns true if this and the other QProcessEnvironment objects are different.
Definition qprocess.h:45
void swap(QProcessEnvironment &other) noexcept
Definition qprocess.h:42
\inmodule QtCore
Definition qshareddata.h:35
\inmodule QtCore
\inmodule QtCore
Definition qstringview.h:76
\macro QT_RESTRICTED_CAST_FROM_ASCII
Definition qstring.h:127
b clear()
double e
cache insert(employee->id(), employee)
QList< QVariant > arguments
else opt state
[0]
Combined button and popup list for selecting options.
#define Q_NORETURN
DBusConnection const char DBusError DBusBusType DBusError return DBusConnection DBusHandleMessageFunction void DBusFreeFunction return DBusConnection return DBusConnection return const char DBusError return DBusConnection DBusMessage dbus_uint32_t return DBusConnection dbus_bool_t DBusConnection DBusAddWatchFunction DBusRemoveWatchFunction DBusWatchToggledFunction void DBusFreeFunction return DBusConnection DBusDispatchStatusFunction void DBusFreeFunction DBusTimeout return DBusTimeout return DBusWatch return DBusWatch unsigned int return DBusError const DBusError return const DBusMessage return DBusMessage return DBusMessage return DBusMessage return DBusMessage return DBusMessage return DBusMessageIter int const void return DBusMessageIter DBusMessageIter return DBusMessageIter void DBusMessageIter void int return DBusMessage DBusMessageIter return DBusMessageIter return DBusMessageIter DBusMessageIter const char const char const char const char return DBusMessage return DBusMessage const char return DBusMessage dbus_bool_t return DBusMessage dbus_uint32_t return DBusMessage void
DBusConnection const char DBusError DBusBusType DBusError return DBusConnection DBusHandleMessageFunction void DBusFreeFunction return DBusConnection return DBusConnection return const char DBusError return DBusConnection DBusMessage dbus_uint32_t return DBusConnection dbus_bool_t DBusConnection DBusAddWatchFunction DBusRemoveWatchFunction DBusWatchToggledFunction void DBusFreeFunction return DBusConnection DBusDispatchStatusFunction void DBusFreeFunction DBusTimeout return DBusTimeout return DBusWatch return DBusWatch unsigned int return DBusError const DBusError return const DBusMessage return DBusMessage return DBusMessage return DBusMessage return DBusMessage return DBusMessage return DBusMessageIter int const void return DBusMessageIter DBusMessageIter return DBusMessageIter void DBusMessageIter void int return DBusMessage DBusMessageIter return DBusMessageIter return DBusMessageIter DBusMessageIter const char const char const char const char return DBusMessage return DBusMessage const char * destination
DBusConnection const char DBusError * error
EGLOutputLayerEXT EGLint EGLAttrib value
[5]
#define Q_DECLARE_FLAGS(Flags, Enum)
Definition qflags.h:174
#define Q_DECLARE_OPERATORS_FOR_FLAGS(Flags)
Definition qflags.h:194
static bool contains(const QJsonArray &haystack, unsigned needle)
Definition qopengl.cpp:116
GLenum mode
GLbitfield flags
GLuint program
GLint GLsizei GLsizei GLenum GLenum GLsizei void * data
GLuint start
GLuint name
void ** params
GLenum GLsizei len
bool operator==(const QRandomGenerator &rng1, const QRandomGenerator &rng2)
Definition qrandom.cpp:1219
#define QT_REQUIRE_CONFIG(feature)
#define QT_DEPRECATED_X(text)
#define Q_ENUM(x)
#define Q_OBJECT
#define Q_SLOTS
#define Q_PRIVATE_SLOT(d, signature)
#define Q_SIGNALS
static QStringList toStringList(const QJsonArray &jsonArray)
unsigned int quint32
Definition qtypes.h:45
long long qint64
Definition qtypes.h:55
future waitForFinished()
file open(QIODevice::ReadOnly)
QStringList keys
settings remove("monkey")
device waitForReadyRead(deadline)
void writeData(const QByteArray &data)
QByteArray readData()
QSharedPointer< T > other(t)
[5]
QString dir
[11]
IUIAutomationTreeWalker __RPC__deref_out_opt IUIAutomationElement ** parent