QProcess Class
La classe QProcess est utilisée pour lancer des programmes externes et communiquer avec eux. Plus d'informations...
| En-tête : | #include <QProcess> |
| CMake : | find_package(Qt6 REQUIRED COMPONENTS Core)target_link_libraries(mytarget PRIVATE Qt6::Core) |
| qmake : | QT += core |
| Héritages : | QIODevice |
- Liste de tous les membres, y compris les membres hérités
- les membres obsolètes
- QProcess fait partie de Entrées/Sorties et Réseaux.
Note : Toutes les fonctions de cette classe sont réentrantes.
Types publics
| 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, …, DisableCoreDumps } |
| flags | UnixProcessFlags |
Fonctions publiques
| 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 |
Fonctions publiques réimplémentées
| 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 |
Emplacements publics
Signaux
| void | errorOccurred(QProcess::ProcessError error) |
| void | finished(int exitCode, QProcess::ExitStatus exitStatus = NormalExit) |
| void | readyReadStandardError() |
| void | readyReadStandardOutput() |
| void | started() |
| void | stateChanged(QProcess::ProcessState newState) |
Membres publics statiques
| 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() |
Fonctions protégées
| void | setProcessState(QProcess::ProcessState state) |
Fonctions protégées réimplémentées
| virtual qint64 | readData(char *data, qint64 maxlen) override |
Description détaillée
Exécution d'un processus
Pour lancer un processus, passez le nom et les arguments de ligne de commande du programme que vous souhaitez exécuter en tant qu'arguments à start(). Les arguments sont fournis sous forme de chaînes individuelles dans un fichier QStringList.
Vous pouvez également définir le programme à exécuter avec setProgram() et setArguments(), puis appeler start() ou open().
Par exemple, l'extrait de code suivant exécute l'exemple d'horloge analogique dans le style Fusion sur les plates-formes X11 en passant les chaînes contenant "-style" et "fusion" comme deux éléments dans la liste des arguments :
QObject *parent = new QObject; ... QString program = "./path/to/Qt/examples/widgets/analogclock"; QStringList arguments; arguments << "-style" << "fusion"; QProcess *myProcess = new QProcess(parent); myProcess->start(program, arguments);
QProcess entre alors dans l'état Starting, et lorsque le programme a démarré, QProcess entre dans l'état Running et émet started().
QProcess vous permet de traiter un processus comme un périphérique d'E/S séquentiel. Vous pouvez écrire et lire dans le processus de la même manière que vous accédez à une connexion réseau en utilisant QTcpSocket. Vous pouvez ensuite écrire sur l'entrée standard du processus en appelant write(), et lire la sortie standard en appelant read(), readLine() et getChar(). Parce qu'il hérite de QIODevice, QProcess peut également être utilisé comme source d'entrée pour QXmlReader, ou pour générer des données à télécharger à l'aide de QNetworkAccessManager.
Lorsque le processus se termine, QProcess revient à l'état NotRunning (l'état initial) et émet finished().
Le signal finished() fournit le code de sortie et l'état de sortie du processus comme arguments, et vous pouvez également appeler exitCode() pour obtenir le code de sortie du dernier processus qui s'est terminé, et exitStatus() pour obtenir son état de sortie. Si une erreur survient à un moment donné, QProcess émet le signal errorOccurred(). Vous pouvez également appeler error() pour connaître le type d'erreur qui s'est produite en dernier et state() pour connaître l'état actuel du processus.
Note : QProcess n'est pas supporté sur VxWorks, iOS, tvOS, ou watchOS.
Trouver l'exécutable
Le programme à exécuter peut être défini soit en appelant setProgram(), soit directement dans l'appel start(). L'effet de l'appel à start() avec le nom du programme et les arguments est équivalent à l'appel à setProgram() et setArguments() avant cette fonction, puis à l'appel de la surcharge sans ces paramètres.
QProcess interprète le nom du programme de trois manières différentes, similaires à la façon dont les shells Unix et l'interpréteur de commandes Windows opèrent dans leurs propres lignes de commande :
- Si le nom du programme est un chemin absolu, c'est l'exécutable exact qui sera lancé et QProcess n'effectue aucune recherche.
- Si le nom du programme est un chemin relatif avec plus d'un composant de chemin (c'est-à-dire qu'il contient au moins une barre oblique), le répertoire de départ dans lequel ce chemin relatif est recherché dépend du système d'exploitation : sous Windows, c'est le répertoire de travail actuel du processus parent, tandis que sous Unix, c'est celui qui est défini avec setWorkingDirectory().
- Si le nom du programme est un nom de fichier simple sans barres obliques, le comportement dépend du système d'exploitation. Sur les systèmes Unix, QProcess recherche la variable d'environnement
PATH; sur Windows, la recherche est effectuée par le système d'exploitation et passe d'abord par le répertoire courant du processus parent avant la variable d'environnementPATH(voir la documentation de CreateProcess pour la liste complète).
Pour éviter tout comportement dépendant de la plate-forme ou tout problème lié à la manière dont l'application en cours a été lancée, il est conseillé de toujours transmettre un chemin absolu vers l'exécutable à lancer. Pour les binaires auxiliaires livrés avec l'application, il est possible de construire un tel chemin en commençant par QCoreApplication::applicationDirPath(). De même, pour lancer explicitement un exécutable qui doit être trouvé relativement au répertoire défini avec setWorkingDirectory(), utilisez un chemin d'accès au programme commençant par "./" ou "../" selon le cas.
Sous Windows, le suffixe ".exe" n'est pas nécessaire pour la plupart des utilisations, sauf celles décrites dans la documentation de CreateProcess. De plus, QProcess convertira les barres obliques de style Unix en barres obliques inverses de chemin Windows pour le nom du programme. Cela permet au code utilisant QProcess d'être écrit d'une manière multiplateforme, comme le montrent les exemples ci-dessus.
QProcess ne permet pas d'exécuter directement les fonctions intégrées de l'interpréteur de commandes Unix ou Windows, telles que la commande dir de cmd.exe ou la commande export de l'interpréteur de commandes Bourne. Sous Unix, même si de nombreuses fonctions intégrées de l'interpréteur de commandes sont également fournies sous forme d'exécutables séparés, leur comportement peut différer de celui des fonctions intégrées. Pour exécuter ces commandes, il convient d'exécuter explicitement l'interpréteur avec les options appropriées. Pour les systèmes Unix, lancez "/bin/sh" avec deux arguments : "-c" et une chaîne contenant la ligne de commande à exécuter. Pour Windows, en raison de la manière non standard dont cmd.exe analyse sa ligne de commande, utilisez setNativeArguments() (par exemple, "/c dir d :").
Variables d'environnement
L'API QProcess offre des méthodes pour manipuler les variables d'environnement que le processus enfant verra. Par défaut, le processus enfant aura une copie des variables d'environnement du processus actuel qui existent au moment où la fonction start() est appelée. Cela signifie que toutes les modifications effectuées à l'aide de qputenv() avant cet appel seront reflétées dans l'environnement du processus enfant. Notez que QProcess n'essaie pas d'empêcher les conditions de course avec qputenv() qui se produisent dans d'autres threads, il est donc recommandé d'éviter qputenv() après le démarrage initial de l'application.
L'environnement d'un enfant spécifique peut être modifié à l'aide des fonctions processEnvironment() et setProcessEnvironment(), qui utilisent la classe QProcessEnvironment. Par défaut, processEnvironment() renvoie un objet pour lequel QProcessEnvironment::inheritsFromParent() est vrai. Définir un environnement qui n'hérite pas du parent amènera QProcess à utiliser exactement cet environnement pour l'enfant lorsqu'il sera démarré.
Le scénario normal part de l'environnement actuel en appelant QProcessEnvironment::systemEnvironment() et procède ensuite à l'ajout, à la modification ou à la suppression de variables spécifiques. La liste de variables résultante peut ensuite être appliquée à un QProcess à l'aide de setProcessEnvironment().
Il est possible de supprimer toutes les variables de l'environnement ou de démarrer à partir d'un environnement vide, en utilisant le constructeur par défaut QProcessEnvironment(). Cela n'est pas conseillé en dehors de conditions contrôlées et spécifiques au système, car il peut y avoir des variables système qui sont définies dans l'environnement du processus actuel et qui sont nécessaires à la bonne exécution du processus enfant.
Sous Windows, QProcess copiera les variables d'environnement "PATH" et "SystemRoot" du processus en cours si elles ont été désactivées. Il n'est pas possible de les désactiver complètement, mais il est possible de leur donner des valeurs vides. La définition de "PATH" à une valeur vide sous Windows entraînera probablement l'échec du démarrage du processus enfant.
Communication via les canaux
Les processus disposent de deux canaux de sortie prédéfinis : Le canal de sortie standard (stdout) fournit la sortie console normale, et le canal d'erreur standard (stderr) fournit généralement les erreurs imprimées par le processus. Ces canaux représentent deux flux de données distincts. Vous pouvez passer de l'un à l'autre en appelant setReadChannel(). QProcess émet readyRead() lorsque des données sont disponibles sur le canal de lecture actuel. Il émet également readyReadStandardOutput() lorsque de nouvelles données de sortie standard sont disponibles, et lorsque de nouvelles données d'erreur standard sont disponibles, readyReadStandardError() est émis. Au lieu d'appeler read(), readLine() ou getChar(), vous pouvez lire explicitement toutes les données de l'un des deux canaux en appelant readAllStandardOutput() ou readAllStandardError().
La terminologie des canaux peut être trompeuse. Il faut savoir que les canaux de sortie du processus correspondent aux canaux de lecture de QProcess, tandis que les canaux d'entrée du processus correspondent aux canaux d'écriture de QProcess. En effet, ce que nous lisons en utilisant QProcess est la sortie du processus, et ce que nous écrivons devient l'entrée du processus.
QProcess peut fusionner les deux canaux de sortie, de sorte que la sortie standard et les données d'erreur standard du processus en cours d'exécution utilisent toutes deux le canal de sortie standard. Appelez setProcessChannelMode() avec MergedChannels avant de démarrer le processus pour activer cette fonctionnalité. Vous avez également la possibilité de transmettre la sortie du processus en cours au processus principal qui l'appelle, en passant ForwardedChannels comme argument. Il est également possible de ne transférer qu'un seul des canaux de sortie - en général, on utilise ForwardedErrorChannel, mais ForwardedOutputChannel existe également. Notez que l'utilisation de la redirection de canaux est généralement une mauvaise idée dans les applications graphiques - vous devriez plutôt présenter les erreurs graphiquement.
Certains processus ont besoin de paramètres d'environnement spéciaux pour fonctionner. Vous pouvez définir des variables d'environnement pour votre processus en appelant setProcessEnvironment(). Pour définir un répertoire de travail, appelez setWorkingDirectory(). Par défaut, les processus sont exécutés dans le répertoire de travail actuel du processus appelant.
Le positionnement et l'ordre Z de l'écran des fenêtres appartenant à des applications GUI lancées avec QProcess sont contrôlés par le système de fenêtrage sous-jacent. Pour les applications Qt Positioning 5, le positionnement peut être spécifié en utilisant l'option de ligne de commande -qwindowgeometry; les applications X11 acceptent généralement une option de ligne de commande -geometry.
API de processus synchrone
QProcess fournit un ensemble de fonctions qui lui permettent d'être utilisé sans boucle d'événements, en suspendant le thread appelant jusqu'à ce que certains signaux soient émis :
- waitForStarted() se bloque jusqu'à ce que le processus ait démarré.
- waitForReadyRead() se bloque jusqu'à ce que de nouvelles données soient disponibles en lecture sur le canal de lecture actuel.
- waitForBytesWritten() se bloque jusqu'à ce qu'une charge utile de données ait été écrite dans le processus.
- waitForFinished() se bloque jusqu'à ce que le processus soit terminé.
L'appel de ces fonctions à partir du thread principal (le thread qui appelle QApplication::exec()) peut entraîner le gel de l'interface utilisateur.
L'exemple suivant exécute gzip pour compresser la chaîne "Qt rocks !", sans boucle événementielle :
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();
Voir également QBuffer, QFile, et QTcpSocket.
Documentation sur les types de membres
QProcess::CreateProcessArgumentModifier
Remarque : ce typage n'est disponible que sous Windows.
Sous Windows, QProcess utilise la fonction CreateProcess de l'API Win32 pour démarrer les processus enfants. Bien que QProcess constitue un moyen confortable de lancer des processus sans se soucier des détails de la plate-forme, il est parfois souhaitable d'affiner les paramètres transmis à CreateProcess. Pour ce faire, il convient de définir une fonction CreateProcessArgumentModifier et de la transmettre à setCreateProcessArgumentsModifier.
Une fonction CreateProcessArgumentModifier prend un paramètre : un pointeur sur une structure CreateProcessArguments. Les membres de cette structure seront transmis à CreateProcess après l'appel de la fonction CreateProcessArgumentModifier.
L'exemple suivant montre comment passer des drapeaux personnalisés à CreateProcess. Lorsque l'on démarre un processus de console B à partir d'un processus de console A, QProcess réutilise par défaut la fenêtre de console du processus A pour le processus B. Dans cet exemple, une nouvelle fenêtre de console avec une palette de couleurs personnalisée est créée pour le processus enfant 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");
Voir aussi QProcess::CreateProcessArguments et setCreateProcessArgumentsModifier().
enum QProcess::ExitStatus
Cette énumération décrit les différents états de sortie de QProcess.
| Constante | Valeur | Description de l'état de sortie |
|---|---|---|
QProcess::NormalExit | 0 | Le processus s'est terminé normalement. |
QProcess::CrashExit | 1 | Le processus s'est écrasé. |
Voir également exitStatus().
enum QProcess::InputChannelMode
Cette énumération décrit les modes du canal d'entrée de processus de QProcess. Passez l'une de ces valeurs à setInputChannelMode() pour définir le mode du canal d'écriture actuel.
| Constante | Valeur | Description |
|---|---|---|
QProcess::ManagedInputChannel | 0 | QProcess gère l'entrée du processus en cours d'exécution. Il s'agit du mode de canal d'entrée par défaut de QProcess. |
QProcess::ForwardedInputChannel | 1 | QProcess transmet l'entrée du processus principal au processus en cours d'exécution. Le processus enfant lit son entrée standard à partir de la même source que le processus principal. Notez que le processus principal ne doit pas essayer de lire son entrée standard lorsque le processus enfant est en cours d'exécution. |
Voir également setInputChannelMode().
enum QProcess::ProcessChannel
Cette énumération décrit les canaux de processus utilisés par le processus en cours d'exécution. Passez l'une de ces valeurs à setReadChannel() pour définir le canal de lecture actuel de QProcess.
| Constante | Valeur | Description |
|---|---|---|
QProcess::StandardOutput | 0 | La sortie standard (stdout) du processus en cours. |
QProcess::StandardError | 1 | L'erreur standard (stderr) du processus en cours. |
Voir également setReadChannel().
enum QProcess::ProcessChannelMode
Cette énumération décrit les modes du canal de sortie du processus de QProcess. Passez l'une de ces valeurs à setProcessChannelMode() pour définir le mode du canal de lecture actuel.
| Constante | Valeur | Description |
|---|---|---|
QProcess::SeparateChannels | 0 | QProcess gère la sortie du processus en cours, en conservant les données de sortie standard et d'erreur standard dans des tampons internes distincts. Vous pouvez sélectionner le canal de lecture actuel de QProcess en appelant setReadChannel(). C'est le mode de canal par défaut de QProcess. |
QProcess::MergedChannels | 1 | QProcess fusionne la sortie du processus en cours dans le canal de sortie standard (stdout). Le canal d'erreur standard (stderr) ne reçoit aucune donnée. Les données de la sortie standard et de l'erreur standard du processus en cours sont entrelacées. Pour les processus détachés, la sortie fusionnée du processus en cours est transmise au processus principal. |
QProcess::ForwardedChannels | 2 | QProcess transmet la sortie du processus en cours au processus principal. Tout ce que le processus enfant écrit sur sa sortie standard et son erreur standard sera écrit sur la sortie standard et l'erreur standard du processus principal. |
QProcess::ForwardedErrorChannel | 4 | QProcess gère la sortie standard du processus en cours, mais transmet son erreur standard au processus principal. Cela reflète l'utilisation typique des outils de ligne de commande comme filtres, où la sortie standard est redirigée vers un autre processus ou un fichier, tandis que l'erreur standard est imprimée sur la console à des fins de diagnostic. (Cette valeur a été introduite dans Qt 5.2.) |
QProcess::ForwardedOutputChannel | 3 | Complémentaire de ForwardedErrorChannel. (Cette valeur a été introduite dans Qt 5.2.) |
Remarque : Windows supprime intentionnellement la sortie des applications à interface graphique uniquement vers les consoles héritées. Cela ne s'applique pas à la sortie redirigée vers des fichiers ou des tuyaux. Pour transférer la sortie des applications GUI uniquement sur la console, vous devez néanmoins utiliser SeparateChannels et effectuer le transfert vous-même en lisant la sortie et en l'écrivant sur les canaux de sortie appropriés.
Voir aussi setProcessChannelMode().
enum QProcess::ProcessError
Cette énumération décrit les différents types d'erreurs signalées par QProcess.
| Constante | Valeur | Description de l'erreur |
|---|---|---|
QProcess::FailedToStart | 0 | Le processus n'a pas démarré. Soit le programme invoqué est manquant, soit vous n'avez pas les autorisations ou les ressources suffisantes pour invoquer le programme. |
QProcess::Crashed | 1 | Le processus s'est arrêté quelque temps après avoir démarré avec succès. |
QProcess::Timedout | 2 | La dernière fonction waitFor...() a expiré. L'état de QProcess est inchangé et vous pouvez essayer d'appeler à nouveau waitFor...(). |
QProcess::WriteError | 4 | Une erreur s'est produite lors de la tentative d'écriture dans le processus. Par exemple, le processus peut ne pas être en cours d'exécution ou il peut avoir fermé son canal d'entrée. |
QProcess::ReadError | 3 | Une erreur s'est produite lors de la tentative de lecture du processus. Par exemple, le processus n'est peut-être pas en cours d'exécution. |
QProcess::UnknownError | 5 | Une erreur inconnue s'est produite. Il s'agit de la valeur de retour par défaut de error(). |
Voir également error().
enum QProcess::ProcessState
Cette énumération décrit les différents états de QProcess.
| Constante | Valeur | Description de l'état |
|---|---|---|
QProcess::NotRunning | 0 | Le processus n'est pas en cours d'exécution. |
QProcess::Starting | 1 | Le processus démarre, mais le programme n'a pas encore été invoqué. |
QProcess::Running | 2 | Le processus est en cours d'exécution et est prêt pour la lecture et l'écriture. |
Voir également state().
[since 6.6] enum class QProcess::UnixProcessFlag
flags QProcess::UnixProcessFlags
Ces drapeaux peuvent être utilisés dans le champ flags de UnixProcessParameters.
| Constante | Valeur | Description du drapeau |
|---|---|---|
QProcess::UnixProcessFlag::CloseFileDescriptors | 0x0010 | Ferme tous les descripteurs de fichiers dépassant le seuil défini par lowestFileDescriptorToClose, empêchant tout descripteur actuellement ouvert dans le processus parent de fuir accidentellement vers le processus enfant. Les descripteurs de fichiers stdin, stdout et stderr ne sont jamais fermés. |
QProcess::UnixProcessFlag::CreateNewSession (since Qt 6.7) | 0x0040 | Démarre une nouvelle session de processus en appelant setsid(2). Cela permet au processus enfant de survivre à la session dans laquelle se trouve le processus actuel. C'est l'une des étapes que startDetached() entreprend pour permettre au processus de se détacher, et c'est également l'une des étapes de la démonisation d'un processus. |
QProcess::UnixProcessFlag::DisconnectControllingTerminal (since Qt 6.7) | 0x0080 | Demande que le processus se déconnecte de son terminal de contrôle, s'il en a un. S'il n'en a pas, rien ne se passe. Les processus encore connectés à un terminal de contrôle peuvent recevoir un signal Hang Up (SIGHUP) si le terminal se ferme, ou l'un des autres signaux de contrôle de terminal (SIGTSTP, SIGTTIN, SIGTTOU). Notez que sur certains systèmes d'exploitation, un processus ne peut se déconnecter du terminal de contrôle que s'il est le chef de session, ce qui signifie que l'indicateur CreateNewSession peut être nécessaire. Comme lui, c'est l'une des étapes de la démonisation d'un processus. |
QProcess::UnixProcessFlag::IgnoreSigPipe | 0x0002 | Le signal SIGPIPE est toujours ignoré (SIG_IGN), même si l'indicateur ResetSignalHandlers a été défini. Par défaut, si l'enfant tente d'écrire sur sa sortie standard ou son erreur standard après que le canal correspondant a été fermé avec QProcess::closeReadChannel(), il reçoit le signal SIGPIPE et se termine immédiatement ; avec cet indicateur, l'opération d'écriture échoue sans signal et l'enfant peut continuer à s'exécuter. |
QProcess::UnixProcessFlag::ResetIds (since Qt 6.7) | 0x0100 | Supprime tout ID d'utilisateur ou de groupe effectif conservé que le processus en cours peut encore avoir (voir setuid(2) et setgid(2), plus QCoreApplication::setSetuidAllowed()). Ceci est utile si le processus en cours a été setuid ou setgid et qu'il ne souhaite pas que le processus enfant conserve les privilèges élevés. |
QProcess::UnixProcessFlag::ResetSignalHandlers | 0x0001 | Réinitialise tous les gestionnaires de signaux Unix à leur état par défaut (c'est-à-dire passe SIG_DFL à signal(2)). Ce drapeau est utile pour s'assurer qu'un signal ignoré (SIG_IGN) n'affecte pas le comportement du processus enfant. |
QProcess::UnixProcessFlag::UseVFork | 0x0020 | Demande à QProcess d'utiliser vfork(2) pour démarrer le processus enfant. Utilisez ce drapeau pour indiquer que la fonction de rappel définie avec setChildProcessModifier() peut être exécutée en toute sécurité dans la partie enfant d'un processus vfork(2); c'est-à-dire que la fonction de rappel ne modifie aucune variable non locale (directement ou par l'intermédiaire d'une fonction qu'elle appelle) et n'essaie pas de communiquer avec le processus parent. L'implémentation définit si QProcess utilisera effectivement vfork(2) et si vfork(2) est différent du standard fork(2). |
QProcess::UnixProcessFlag::DisableCoreDumps (since Qt 6.9) | 0x0200 | Demande que QProcess désactive les vidages de noyau dans le processus enfant. Ceci est utile si l'exécutable exécuté est susceptible de se planter mais que les utilisateurs et les mainteneurs ne seront pas intéressés par la génération de rapports de bogues dans ces conditions (par exemple, l'exécutable est un processus de test). Ce paramètre n'affecte pas l'adresse exitStatus() du processus qui s'est écrasé. Il est mis en œuvre en fixant la limite souple de la taille de la ressource de vidage du noyau à zéro, ce qui signifie que l'application peut toujours annuler ce changement en l'augmentant à une valeur jusqu'à la limite stricte. |
Cette liste a été introduite dans Qt 6.6.
Le type UnixProcessFlags est un typedef pour QFlags<UnixProcessFlag>. Il stocke une combinaison OR de valeurs UnixProcessFlag.
Voir également setUnixProcessParameters() et unixProcessParameters().
Documentation des fonctions membres
[explicit] QProcess::QProcess(QObject *parent = nullptr)
Construit un objet QProcess avec l'adresse parent.
[virtual noexcept] QProcess::~QProcess()
Détruit l'objet QProcess, c'est-à-dire qu'elle tue le processus.
Notez que cette fonction ne revient pas tant que le processus n'est pas terminé.
QStringList QProcess::arguments() const
Renvoie les arguments de la ligne de commande avec lesquels le processus a été lancé pour la dernière fois.
Voir aussi setArguments() et start().
[override virtual] qint64 QProcess::bytesToWrite() const
Réimplémente : QIODevice::bytesToWrite() const.
[since 6.0] std::function<void ()> QProcess::childProcessModifier() const
Renvoie la fonction modificatrice précédemment définie en appelant setChildProcessModifier().
Remarque : cette fonction n'est disponible que sur les plates-formes Unix.
Cette fonction a été introduite dans Qt 6.0.
Voir aussi setChildProcessModifier() et unixProcessParameters().
[override virtual] void QProcess::close()
Réimplémente : QIODevice::close().
Ferme toute communication avec le processus et le tue. Après l'appel de cette fonction, QProcess n'émettra plus readyRead() et les données ne pourront plus être lues ou écrites.
void QProcess::closeReadChannel(QProcess::ProcessChannel channel)
Ferme le canal de lecture channel. Après l'appel de cette fonction, QProcess ne recevra plus de données sur le canal. Les données déjà reçues restent disponibles pour la lecture.
Appelez cette fonction pour économiser de la mémoire, si vous n'êtes pas intéressé par la sortie du processus.
Voir aussi closeWriteChannel() et setReadChannel().
void QProcess::closeWriteChannel()
Planifie la fermeture du canal d'écriture de QProcess. Le canal sera fermé une fois que toutes les données auront été écrites dans le processus. Après l'appel de cette fonction, toute tentative d'écriture dans le processus échouera.
La fermeture du canal d'écriture est nécessaire pour les programmes qui lisent les données d'entrée jusqu'à ce que le canal soit fermé. Par exemple, le programme "more" est utilisé pour afficher des données textuelles dans une console sous Unix et Windows. Mais il n'affichera pas les données textuelles tant que le canal d'écriture de QProcess n'aura pas été fermé. Exemple :
QProcess more; more.start("more"); more.write("Text to display"); more.closeWriteChannel(); // QProcess will emit readyRead() once "more" starts printing
Le canal d'écriture est implicitement ouvert lorsque start() est appelé.
Voir aussi closeReadChannel().
QProcess::CreateProcessArgumentModifier QProcess::createProcessArgumentsModifier() const
Renvoie une fonction modificatrice précédemment définie sur CreateProcess.
Remarque : cette fonction n'est disponible que sur la plate-forme Windows.
Voir aussi setCreateProcessArgumentsModifier() et QProcess::CreateProcessArgumentModifier.
QProcess::ProcessError QProcess::error() const
Renvoie le type d'erreur qui s'est produite en dernier.
Voir aussi state().
[signal] void QProcess::errorOccurred(QProcess::ProcessError error)
Ce signal est émis lorsqu'une erreur se produit dans le processus. L'adresse error spécifiée décrit le type d'erreur qui s'est produite.
[static] int QProcess::execute(const QString &program, const QStringList &arguments = {})
Lance le programme program avec les arguments arguments dans un nouveau processus, attend qu'il se termine, puis renvoie le code de sortie du processus. Toutes les données que le nouveau processus écrit dans la console sont transmises au processus appelant.
L'environnement et le répertoire de travail sont hérités du processus appelant.
La gestion des arguments est identique à la surcharge start() correspondante.
Si le processus ne peut pas être lancé, -2 est renvoyé. Si le processus se bloque, -1 est renvoyé. Sinon, le code de sortie du processus est renvoyé.
Voir également start().
int QProcess::exitCode() const
Renvoie le code de sortie du dernier processus qui s'est terminé.
Cette valeur n'est valable que si exitStatus() renvoie NormalExit.
QProcess::ExitStatus QProcess::exitStatus() const
Renvoie l'état de sortie du dernier processus qui s'est terminé.
Sous Windows, si le processus a été terminé par TerminateProcess() à partir d'une autre application, cette fonction renvoie toujours NormalExit, sauf si le code de sortie est inférieur à 0.
[noexcept, since 6.7] void QProcess::failChildProcessModifier(const char *description, int error = 0)
Ces fonctions peuvent être utilisées dans l'ensemble de modificateurs avec setChildProcessModifier() pour indiquer qu'une condition d'erreur a été rencontrée. Lorsque le modificateur appelle ces fonctions, QProcess émet errorOccurred() avec le code QProcess::FailedToStart dans le processus parent. Le paramètre description peut être utilisé pour inclure des informations dans errorString() afin d'aider à diagnostiquer le problème, généralement le nom de l'appel qui a échoué, de manière similaire à la fonction de la bibliothèque C perror(). En outre, le paramètre error peut être un code d'erreur <errno.h> dont le texte sera également inclus.
Par exemple, un modificateur enfant peut préparer un descripteur de fichier supplémentaire pour le processus enfant de cette manière :
process.setChildProcessModifier([fd, &process]() { if (dup2(fd, TargetFileDescriptor) < 0) process.failChildProcessModifier(errno, "aux comm channel"); }); process.start();
Où fd est un descripteur de fichier actuellement ouvert dans le processus parent. Si l'appel système dup2() a entraîné une condition EBADF, le processus errorString() pourrait être "Child process modifier reported error : aux comm channel : Bad file descriptor".
Cette fonction ne renvoie pas à l'appelant. L'utiliser ailleurs que dans le modificateur enfant et avec l'objet QProcess correct est un comportement indéfini.
Remarque : l'implémentation limite la longueur du paramètre description à environ 500 caractères. Cela n'inclut pas le texte du code error.
Cette fonction a été introduite dans Qt 6.7.
Voir aussi setChildProcessModifier() et setUnixProcessParameters().
[signal] void QProcess::finished(int exitCode, QProcess::ExitStatus exitStatus = NormalExit)
Ce signal est émis lorsque le processus se termine. exitCode est le code de sortie du processus (valable uniquement pour les sorties normales) et exitStatus est l'état de sortie. Une fois le processus terminé, les tampons de QProcess sont toujours intacts. Vous pouvez toujours lire les données que le processus a pu écrire avant de se terminer.
Voir aussi exitStatus().
QProcess::InputChannelMode QProcess::inputChannelMode() const
Renvoie le mode du canal d'entrée standard de QProcess.
Voir aussi setInputChannelMode() et InputChannelMode.
[override virtual] bool QProcess::isSequential() const
Réimplémente : QIODevice::isSequential() const.
[slot] void QProcess::kill()
Tue le processus en cours et le fait sortir immédiatement.
Sous Windows, kill() utilise TerminateProcess, et sous Unix et macOS, le signal SIGKILL est envoyé au processus.
Voir également terminate().
QString QProcess::nativeArguments() const
Renvoie les arguments natifs supplémentaires de la ligne de commande pour le programme.
Remarque : cette fonction n'est disponible que sur la plate-forme Windows.
Voir également setNativeArguments().
[static] QString QProcess::nullDevice()
Le périphérique null du système d'exploitation.
Le chemin d'accès au fichier retourné utilise les séparateurs de répertoire natifs.
Voir aussi QProcess::setStandardInputFile(), QProcess::setStandardOutputFile() et QProcess::setStandardErrorFile().
[override virtual] bool QProcess::open(QIODeviceBase::OpenMode mode = ReadWrite)
Réimplémente : QIODevice::open(QIODeviceBase::OpenMode mode).
Démarre le programme défini par setProgram() avec les arguments définis par setArguments(). L'OpenMode est défini sur mode.
Cette méthode est un alias de start() et n'existe que pour implémenter complètement l'interface définie par QIODevice.
Retourne true si le programme a été lancé.
Voir aussi start(), setProgram() et setArguments().
QProcess::ProcessChannelMode QProcess::processChannelMode() const
Renvoie le mode de canal des canaux de sortie et d'erreur standard de QProcess.
Voir aussi setProcessChannelMode(), ProcessChannelMode, et setReadChannel().
QProcessEnvironment QProcess::processEnvironment() const
Renvoie l'environnement que QProcess transmettra à son processus enfant. Si aucun environnement n'a été défini à l'aide de setProcessEnvironment(), cette méthode renvoie un objet indiquant que l'environnement sera hérité du parent.
Voir aussi setProcessEnvironment(), QProcessEnvironment::inheritsFromParent() et Environment variables.
qint64 QProcess::processId() const
Renvoie l'identifiant natif du processus en cours, s'il est disponible. Si aucun processus n'est en cours d'exécution, 0 est renvoyé.
QString QProcess::program() const
Renvoie le programme avec lequel le processus a été lancé pour la dernière fois.
Voir aussi setProgram() et start().
QByteArray QProcess::readAllStandardError()
Indépendamment du canal de lecture actuel, cette fonction renvoie toutes les données disponibles à partir de l'erreur standard du processus sous la forme d'un fichier QByteArray.
Voir aussi readyReadStandardError(), readAllStandardOutput(), readChannel() et setReadChannel().
QByteArray QProcess::readAllStandardOutput()
Indépendamment du canal de lecture actuel, cette fonction renvoie toutes les données disponibles sur la sortie standard du processus sous la forme d'un fichier QByteArray.
Voir aussi readyReadStandardOutput(), readAllStandardError(), readChannel() et setReadChannel().
QProcess::ProcessChannel QProcess::readChannel() const
Renvoie le canal de lecture actuel de QProcess.
Voir aussi setReadChannel().
[override virtual protected] qint64 QProcess::readData(char *data, qint64 maxlen)
Réimplémente : QIODevice::readData(char *data, qint64 maxSize).
[private signal] void QProcess::readyReadStandardError()
Ce signal est émis lorsque le processus a mis de nouvelles données à disposition via son canal d'erreur standard (stderr). Il est émis indépendamment de l'adresse read channel.
Remarque : il s'agit d'un signal privé. Il peut être utilisé dans des connexions de signaux, mais ne peut pas être émis par l'utilisateur.
Voir également readAllStandardError() et readChannel().
[private signal] void QProcess::readyReadStandardOutput()
Ce signal est émis lorsque le processus a mis de nouvelles données à disposition via son canal de sortie standard (stdout). Il est émis indépendamment de l'adresse read channel.
Remarque : il s'agit d'un signal privé. Il peut être utilisé dans des connexions de signaux mais ne peut pas être émis par l'utilisateur.
Voir également readAllStandardOutput() et readChannel().
void QProcess::setArguments(const QStringList &arguments)
Définit l'adresse arguments à transmettre au programme appelé lors du démarrage du processus. Cette fonction doit être appelée avant start().
Voir aussi start(), setProgram() et arguments().
[since 6.0] void QProcess::setChildProcessModifier(const std::function<void ()> &modifier)
Définit la fonction modifier pour le processus enfant, pour les systèmes Unix (y compris macOS ; pour Windows, voir setCreateProcessArgumentsModifier()). La fonction contenue dans l'argument modifier sera invoquée dans le processus enfant après que fork() ou vfork() a été exécuté et que QProcess a configuré les descripteurs de fichiers standard pour le processus enfant, mais avant execve(), à l'intérieur de start().
L'exemple suivant montre comment configurer un processus enfant pour qu'il s'exécute sans privilèges :
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(); }
Si la fonction modificatrice rencontre une condition d'échec, elle peut utiliser failChildProcessModifier() pour signaler la situation à l'appelant QProcess. Elle peut également utiliser d'autres méthodes pour arrêter le processus, comme _exit() ou abort().
Certaines propriétés du processus enfant, telles que la fermeture de tous les descripteurs de fichiers superflus ou la déconnexion de l'ATS de contrôle, peuvent être obtenues plus facilement en utilisant setUnixProcessParameters(), qui peut détecter un échec et signaler une condition FailedToStart. Le modificateur est utile pour modifier certaines propriétés peu communes du processus enfant, telles que la configuration de descripteurs de fichiers supplémentaires. Si un modificateur de processus enfant et des paramètres de processus Unix sont définis, le modificateur est exécuté avant que ces paramètres ne soient appliqués.
Remarque : dans les applications multithread, cette fonction doit veiller à ne pas appeler de fonctions susceptibles de verrouiller des mutex utilisés par d'autres threads (en général, il est conseillé de n'utiliser que des fonctions définies par POSIX comme étant "async-signal-safe"). La plupart des API de Qt XML ne sont pas sûres à l'intérieur de ce callback, y compris qDebug(), et peuvent conduire à des blocages.
Note : Si le drapeau UnixProcessParameters::UseVFork est activé via setUnixProcessParameters(), QProcess peut utiliser la sémantique vfork() pour démarrer le processus enfant, donc cette fonction doit obéir à des contraintes encore plus strictes. Premièrement, comme elle partage toujours la mémoire avec le processus parent, elle ne doit pas écrire dans des variables non locales et doit obéir à une sémantique d'ordre appropriée lorsqu'elle lit dans ces variables, afin d'éviter les courses aux données. Deuxièmement, d'autres fonctions de la bibliothèque peuvent se comporter de manière incorrecte ; par conséquent, cette fonction ne doit utiliser que des appels système de bas niveau, tels que read(), write(), setsid(), nice(), et similaires.
Cette fonction a été introduite dans Qt 6.0.
Voir aussi childProcessModifier(), failChildProcessModifier(), et setUnixProcessParameters().
void QProcess::setCreateProcessArgumentsModifier(QProcess::CreateProcessArgumentModifier modifier)
Définit le modifier pour l'appel de l'API Win32 CreateProcess. Passez QProcess::CreateProcessArgumentModifier() pour supprimer celui qui a été défini précédemment.
Remarque : cette fonction n'est disponible que sur la plate-forme Windows et nécessite C++11.
Voir également createProcessArgumentsModifier(), QProcess::CreateProcessArgumentModifier, et setChildProcessModifier().
void QProcess::setInputChannelMode(QProcess::InputChannelMode mode)
Définit le mode du canal d'entrée standard de QProcess à mode. Ce mode sera utilisé la prochaine fois que start() sera appelé.
Voir aussi inputChannelMode() et InputChannelMode.
void QProcess::setNativeArguments(const QString &arguments)
Définit une ligne de commande native supplémentaire arguments pour le programme.
Sur les systèmes d'exploitation où l'API du système pour transmettre la ligne de commande arguments à un sous-processus utilise nativement une chaîne unique, on peut concevoir des lignes de commande qui ne peuvent pas être transmises via l'API de QProcess basée sur une liste portable. Dans ce cas, cette fonction doit être utilisée pour définir une chaîne qui est ajoutée à la chaîne composée à partir de la liste d'arguments habituelle, avec un espace de délimitation.
Remarque : cette fonction n'est disponible que sur la plate-forme Windows.
Voir également nativeArguments().
void QProcess::setProcessChannelMode(QProcess::ProcessChannelMode mode)
Définit le mode des canaux de sortie standard et d'erreur standard de QProcess sur le mode mode spécifié. Ce mode sera utilisé lors du prochain appel à start(). Par exemple :
QProcess builder ; builder.setProcessChannelMode(QProcess::MergedChannels) ; builder.start("make", QStringList()<< "-j2") ;if (!builder.waitForFinished()) qDebug() << "Make failed:" << builder.errorString(); autre qDebug() << "Make output:" << builder.readAll();
Voir aussi processChannelMode(), ProcessChannelMode, et setReadChannel().
void QProcess::setProcessEnvironment(const QProcessEnvironment &environment)
Définit la variable environment que QProcess transmettra au processus enfant.
Par exemple, le code suivant ajoute la variable d'environnement TMPDIR:
QProcess process; QProcessEnvironment env = QProcessEnvironment::systemEnvironment(); env.insert("TMPDIR", "C:\\MyApp\\temp"); // Add an environment variable process.setProcessEnvironment(env); process.start("myapp");
Notez que, sous Windows, les noms des variables d'environnement ne sont pas sensibles à la casse.
Voir également processEnvironment(), QProcessEnvironment::systemEnvironment() et Environment variables.
[protected] void QProcess::setProcessState(QProcess::ProcessState state)
Définit l'état actuel du site QProcess en fonction du site state spécifié.
Voir aussi state().
void QProcess::setProgram(const QString &program)
Définit le program à utiliser lors du démarrage du processus. Cette fonction doit être appelée avant start().
Si program est un chemin absolu, il spécifie l'exécutable exact qui sera lancé. Les chemins relatifs seront résolus d'une manière spécifique à la plate-forme, ce qui inclut la recherche de la variable d'environnement PATH (voir Finding the Executable pour plus de détails).
Voir également start(), setArguments(), program() et QStandardPaths::findExecutable().
void QProcess::setReadChannel(QProcess::ProcessChannel channel)
Définit le canal de lecture actuel de l'adresse QProcess à l'adresse channel. Le canal d'entrée actuel est utilisé par les fonctions read(), readAll(), readLine() et getChar(). Il détermine également le canal qui déclenche l'émission de readyRead() par QProcess.
Voir également readChannel().
void QProcess::setStandardErrorFile(const QString &fileName, QIODeviceBase::OpenMode mode = Truncate)
Redirige l'erreur standard du processus vers le fichier fileName. Lorsque la redirection est en place, le canal de lecture de l'erreur standard est fermé : la lecture à partir de ce canal à l'aide de read() échouera toujours, tout comme readAllStandardError(). Le fichier sera ajouté si mode est Append, sinon il sera tronqué.
Voir setStandardOutputFile() pour plus d'informations sur la façon dont le fichier est ouvert.
Remarque : si setProcessChannelMode() a été appelé avec un argument QProcess::MergedChannels, cette fonction n'a aucun effet.
Voir aussi setStandardInputFile(), setStandardOutputFile() et setStandardOutputProcess().
void QProcess::setStandardInputFile(const QString &fileName)
Redirige l'entrée standard du processus vers le fichier indiqué par fileName. Lorsqu'une redirection d'entrée est en place, l'objet QProcess sera en mode lecture seule (appeler write() entraînera une erreur).
Pour que le processus lise immédiatement EOF, passez nullDevice() ici. Cette méthode est plus propre que l'utilisation de closeWriteChannel() avant d'écrire des données, car elle peut être mise en place avant le lancement du processus.
Si le fichier fileName n'existe pas au moment où start() est appelé ou n'est pas lisible, le lancement du processus échouera.
L'appel à setStandardInputFile() après le démarrage du processus n'a aucun effet.
Voir aussi setStandardOutputFile(), setStandardErrorFile() et setStandardOutputProcess().
void QProcess::setStandardOutputFile(const QString &fileName, QIODeviceBase::OpenMode mode = Truncate)
Redirige la sortie standard du processus vers le fichier fileName. Lorsque la redirection est en place, le canal de lecture de la sortie standard est fermé : la lecture à partir de ce canal à l'aide de read() échouera toujours, tout comme readAllStandardOutput().
Pour rejeter toute la sortie standard du processus, passez nullDevice() ici. C'est plus efficace que de ne jamais lire la sortie standard, car aucun tampon QProcess n'est rempli.
Si le fichier fileName n'existe pas au moment où start() est appelé, il sera créé. S'il ne peut pas être créé, le démarrage échouera.
Si le fichier existe et que mode est QIODeviceBase::Truncate, le fichier sera tronqué. Sinon (si mode est QIODeviceBase::Append), le fichier sera complété.
L'appel à setStandardOutputFile() après le démarrage du processus n'a aucun effet.
Si fileName est une chaîne vide, la redirection de la sortie standard s'arrête. Ceci est utile pour restaurer la sortie standard après une redirection.
Voir aussi setStandardInputFile(), setStandardErrorFile() et setStandardOutputProcess().
void QProcess::setStandardOutputProcess(QProcess *destination)
Dirige le flux de sortie standard de ce processus vers l'entrée standard du processus destination.
La commande shell suivante :
command1 | command2peut être exécutée à l'aide de QProcess avec le code suivant :
QProcess process1; QProcess process2; process1.setStandardOutputProcess(&process2); process1.start("command1"); process2.start("command2");
[since 6.6] void QProcess::setUnixProcessParameters(const QProcess::UnixProcessParameters ¶ms)
Définit les paramètres supplémentaires du processus enfant sur les systèmes Unix à params. Cette fonction peut être utilisée pour demander à QProcess de modifier le processus enfant avant de lancer l'exécutable cible.
Cette fonction peut être utilisée pour modifier certaines propriétés du processus enfant, telles que la fermeture de tous les descripteurs de fichiers superflus, la modification du niveau de confort du processus enfant ou la déconnexion de l'ATS de contrôle. Pour un contrôle plus fin du processus enfant ou pour le modifier d'une autre manière, utilisez la fonction setChildProcessModifier(). Si un modificateur de processus enfant et des paramètres de processus Unix sont définis, le modificateur est exécuté avant que ces paramètres ne soient appliqués.
Remarque : cette fonction n'est disponible que sur les plates-formes Unix.
Cette fonction a été introduite dans Qt 6.6.
Voir aussi unixProcessParameters() et setChildProcessModifier().
[since 6.6] void QProcess::setUnixProcessParameters(QProcess::UnixProcessFlags flagsOnly)
Définit les paramètres supplémentaires pour le processus enfant sur les systèmes Unix à flagsOnly. C'est la même chose que la surcharge avec seulement le champ flags défini.
Remarque : cette fonction n'est disponible que sur les plates-formes Unix.
Il s'agit d'une fonction surchargée.
Cette fonction a été introduite dans Qt 6.6.
Voir aussi unixProcessParameters() et setChildProcessModifier().
void QProcess::setWorkingDirectory(const QString &dir)
Définit le répertoire de travail à dir. QProcess démarrera le processus dans ce répertoire. Par défaut, le processus est lancé dans le répertoire de travail du processus appelant.
Voir également workingDirectory() et start().
[static] QStringList QProcess::splitCommand(QStringView command)
Divise la chaîne command en une liste de jetons et renvoie la liste.
Les mots-clés contenant des espaces peuvent être entourés de guillemets doubles ; trois guillemets doubles consécutifs représentent le caractère de guillemet lui-même.
void QProcess::start(const QString &program, const QStringList &arguments = {}, QIODeviceBase::OpenMode mode = ReadWrite)
Démarre l'application program dans un nouveau processus, en transmettant les arguments de la ligne de commande à arguments. Voir setProgram() pour des informations sur la manière dont QProcess recherche l'exécutable à exécuter. Le mode d'ouverture (OpenMode) est défini sur mode. Aucun autre découpage des arguments n'est effectué.
L'objet QProcess entre immédiatement dans l'état Starting (Démarrage). Si le processus démarre avec succès, QProcess émettra started() ; sinon, errorOccurred() sera émis. Notez que sur les plateformes capables de démarrer des processus enfants de manière synchrone (notamment Windows), ces signaux seront émis avant le retour de cette fonction et l'objet QProcess passera à l'état QProcess::Running ou QProcess::NotRunning, respectivement. Sur les autres plateformes, les signaux started() et errorOccurred() seront retardés.
Appelez waitForStarted() pour vous assurer que le processus a démarré (ou n'a pas démarré) et que ces signaux ont été émis. Il est prudent d'appeler cette fonction même si l'état de démarrage du processus est déjà connu, bien que le signal ne soit pas émis à nouveau.
Windows : Les arguments sont cités et réunis dans une ligne de commande compatible avec la fonction Windows CommandLineToArgvW(). Pour les programmes dont les exigences en matière de citation de la ligne de commande sont différentes, vous devez utiliser setNativeArguments(). Un programme notable qui ne suit pas les règles de CommandLineToArgvW() est cmd.exe et, par conséquent, tous les scripts batch.
Si l'objet QProcess exécute déjà un processus, un avertissement peut être affiché sur la console, mais le processus existant continuera à s'exécuter sans être affecté.
Remarque : le succès du démarrage du processus enfant implique uniquement que le système d'exploitation a réussi à créer le processus et à lui attribuer les ressources dont dispose chaque processus, telles que son identifiant. Le processus fils peut se bloquer ou échouer très tôt et ne pas produire les résultats escomptés. Sur la plupart des systèmes d'exploitation, il peut s'agir d'erreurs de liaison dynamique.
Voir également processId(), started(), waitForStarted() et setNativeArguments().
void QProcess::start(QIODeviceBase::OpenMode mode = ReadWrite)
Démarre le programme défini par setProgram() avec les arguments définis par setArguments(). Le mode d'ouverture (OpenMode) est défini sur mode.
Il s'agit d'une fonction surchargée.
Voir aussi open(), setProgram() et setArguments().
[since 6.0] void QProcess::startCommand(const QString &command, QIODeviceBase::OpenMode mode = ReadWrite)
Lance la commande command dans un nouveau processus. Le mode d'ouverture est défini sur mode.
command est une chaîne de texte unique contenant à la fois le nom du programme et ses arguments. Les arguments sont séparés par un ou plusieurs espaces. Les arguments sont séparés par un ou plusieurs espaces :
QProcess process; process.startCommand("del /s *.txt"); // same as process.start("del", QStringList() << "/s" << "*.txt"); //...
Les arguments contenant des espaces doivent être mis entre guillemets pour être correctement fournis au nouveau processus. Par exemple, les guillemets littéraux dans la chaîne doivent être mis entre guillemets :
QProcess process; process.startCommand("dir \"My Documents\"");
Les guillemets littéraux dans la chaîne command sont représentés par des triples guillemets. Par exemple : Les guillemets littéraux dans la chaîne sont représentés par des guillemets triples :
QProcess process; process.startCommand("dir \"Epic 12\"\"\" Singles\"");
Une fois que la chaîne command a été divisée et mise hors guillemets, cette fonction se comporte comme start().
Sur les systèmes d'exploitation où l'API du système pour passer des arguments de ligne de commande à un sous-processus utilise nativement une chaîne unique (Windows), il est possible de concevoir des lignes de commande qui ne peuvent pas être passées via l'API portable basée sur les listes de QProcess. Dans ces rares cas, vous devez utiliser setProgram() et setNativeArguments() au lieu de cette fonction.
Cette fonction a été introduite dans Qt 6.0.
Voir aussi splitCommand() et start().
bool QProcess::startDetached(qint64 *pid = nullptr)
Démarre le programme défini par setProgram() avec les arguments définis par setArguments() dans un nouveau processus, et s'en détache. Renvoie true en cas de succès, sinon false. Si le processus appelant se termine, le processus détaché continuera à fonctionner sans être affecté.
Unix : Le processus démarré s'exécute dans sa propre session et agit comme un démon.
Le processus est lancé dans le répertoire défini par setWorkingDirectory(). Si workingDirectory() est vide, le répertoire de travail est hérité du processus appelant.
Si la fonction réussit, *pid reçoit l'identifiant du processus démarré ; sinon, il reçoit la valeur -1. Notez que le processus enfant peut se terminer et que le PID peut devenir invalide sans préavis. De plus, après la sortie du processus enfant, le même PID peut être recyclé et utilisé par un processus complètement différent. Le code utilisateur doit être prudent lors de l'utilisation de cette variable, en particulier si l'on a l'intention de mettre fin de force au processus par le biais du système d'exploitation.
Seuls les paramètres de propriété suivants sont pris en charge par startDetached() :
- setArguments()
- setCreateProcessArgumentsModifier()
- setNativeArguments()
- setProcessEnvironment()
- setProgram()
- setStandardErrorFile()
- setStandardInputFile()
- setStandardOutputFile()
- setProcessChannelMode(QProcess::MergedChannels)
- setStandardOutputProcess()
- setWorkingDirectory()
Toutes les autres propriétés de l'objet QProcess sont ignorées.
Remarque : le processus appelé hérite de la fenêtre de console du processus appelant. Pour supprimer la sortie console, rediriger la sortie standard/erreur vers QProcess::nullDevice().
Voir aussi start() et 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)
Démarre le programme program avec les arguments arguments dans un nouveau processus et s'en détache. Renvoie true en cas de succès ; sinon, il renvoie false. Si le processus appelant se termine, le processus détaché continuera à fonctionner sans être affecté.
La gestion des arguments est identique à la surcharge start() correspondante.
Le processus sera lancé dans le répertoire workingDirectory. Si workingDirectory est vide, le répertoire de travail est hérité du processus appelant.
Si la fonction réussit, *pid est défini comme l'identifiant du processus démarré.
Cette fonction surcharge QProcess::startDetached().
Voir aussi start().
[private signal] void QProcess::started()
Ce signal est émis par QProcess lorsque le processus a démarré, et state() renvoie Running.
Remarque : il s'agit d'un signal privé. Il peut être utilisé dans des connexions de signaux mais ne peut pas être émis par l'utilisateur.
QProcess::ProcessState QProcess::state() const
Renvoie l'état actuel du processus.
Voir aussi stateChanged() et error().
[private signal] void QProcess::stateChanged(QProcess::ProcessState newState)
Ce signal est émis lorsque l'état de QProcess change. L'argument newState est l'état dans lequel QProcess a changé.
Remarque : il s'agit d'un signal privé. Il peut être utilisé dans les connexions de signaux mais ne peut pas être émis par l'utilisateur.
[static] QStringList QProcess::systemEnvironment()
Renvoie l'environnement du processus appelant sous la forme d'une liste de paires clé-valeur. Exemple :
QStringList environment = QProcess::systemEnvironment(); // environment = {"PATH=/usr/bin:/usr/local/bin", // "USER=greg", "HOME=/home/greg"}
Cette fonction ne met pas en cache l'environnement du système. Il est donc possible d'obtenir une version actualisée de l'environnement si des fonctions de bas niveau de la bibliothèque C telles que setenv ou putenv ont été appelées.
Notez toutefois que des appels répétés à cette fonction recréeront la liste des variables d'environnement, ce qui est une opération non triviale.
Remarque : pour le nouveau code, il est recommandé d'utiliser QProcessEnvironment::systemEnvironment().
Voir aussi QProcessEnvironment::systemEnvironment() et setProcessEnvironment().
[slot] void QProcess::terminate()
Tente de mettre fin au processus.
Le processus peut ne pas se terminer à la suite de l'appel de cette fonction (il a la possibilité de demander à l'utilisateur s'il a des fichiers non sauvegardés, etc.)
Sous Windows, terminate() envoie un message WM_CLOSE à toutes les fenêtres de premier niveau du processus, puis au fil principal du processus lui-même. Sous Unix et macOS, le signal SIGTERM est envoyé.
Les applications console sous Windows qui n'exécutent pas de boucle d'événements, ou dont la boucle d'événements ne gère pas le message WM_CLOSE, ne peuvent être terminées qu'en appelant kill().
Voir également kill().
[noexcept, since 6.6] QProcess::UnixProcessParameters QProcess::unixProcessParameters() const
Renvoie l'objet UnixProcessParameters décrivant les drapeaux et paramètres supplémentaires qui seront appliqués au processus enfant sur les systèmes Unix. Les paramètres par défaut correspondent à une construction par défaut de UnixProcessParameters.
Remarque : cette fonction n'est disponible que sur les plates-formes Unix.
Cette fonction a été introduite dans Qt 6.6.
Voir aussi setUnixProcessParameters() et childProcessModifier().
[override virtual] bool QProcess::waitForBytesWritten(int msecs = 30000)
Réimplémente : QIODevice::waitForBytesWritten(int msecs).
bool QProcess::waitForFinished(int msecs = 30000)
Bloque jusqu'à ce que le processus soit terminé et que le signal finished() ait été émis, ou jusqu'à ce que msecs millisecondes se soient écoulées.
Renvoie true si le processus s'est terminé ; sinon, il renvoie false (si l'opération a dépassé le temps imparti, si une erreur s'est produite ou si ce QProcess est déjà terminé).
Cette fonction peut fonctionner sans boucle d'événements. Elle est utile lors de l'écriture d'applications non-GUI et lors de l'exécution d'opérations d'E/S dans un thread non-GUI.
Attention : L'appel de cette fonction à partir du thread principal (GUI) peut entraîner le gel de l'interface utilisateur.
Si msecs vaut -1, cette fonction n'est pas interrompue.
Voir aussi finished(), waitForStarted(), waitForReadyRead() et waitForBytesWritten().
[override virtual] bool QProcess::waitForReadyRead(int msecs = 30000)
Réimplémente : QIODevice::waitForReadyRead(int msecs).
bool QProcess::waitForStarted(int msecs = 30000)
Bloque jusqu'à ce que le processus ait démarré et que le signal started() ait été émis, ou jusqu'à ce que msecs millisecondes se soient écoulées.
Renvoie true si le processus a été lancé avec succès ; sinon, il renvoie false (si l'opération a dépassé le temps imparti ou si une erreur s'est produite). Si le processus a déjà été lancé avec succès avant l'exécution de cette fonction, il est renvoyé immédiatement.
Cette fonction peut fonctionner sans boucle d'événements. Elle est utile lors de l'écriture d'applications non-GUI et lors de l'exécution d'opérations d'E/S dans un thread non-GUI.
Attention : L'appel de cette fonction à partir du thread principal (GUI) peut entraîner le gel de l'interface utilisateur.
Si msecs vaut -1, cette fonction n'est pas interrompue.
Voir aussi started(), waitForReadyRead(), waitForBytesWritten() et waitForFinished().
QString QProcess::workingDirectory() const
Si un répertoire de travail a été attribué à QProcess, cette fonction renvoie le répertoire de travail dans lequel QProcess entrera avant que le programme ne démarre. Dans le cas contraire (c'est-à-dire si aucun répertoire n'a été attribué), une chaîne vide est renvoyée et QProcess utilisera le répertoire de travail actuel de l'application à la place.
Voir aussi setWorkingDirectory().
© 2026 The Qt Company Ltd. Documentation contributions included herein are the copyrights of their respective owners. The documentation provided herein is licensed under the terms of the GNU Free Documentation License version 1.3 as published by the Free Software Foundation. Qt and respective logos are trademarks of The Qt Company Ltd. in Finland and/or other countries worldwide. All other trademarks are property of their respective owners.