Table des matières
1. Introduction " >1. Introduction
2. Utilisation d'anciens modules " >2. Utilisation d'anciens modules
1.os.system()
Exécuter les commandes du système d'exploitation, afficher le résultats à l'écran et renvoie uniquement l'état d'exécution de la commande (0 : succès, non-0 : échec)
os.popen().
3. module de sous-processus " > 3. module de sous-processus
1. subprocess.run()" >1. subprocess.run()
" > 4. sous-processus. Popen()
" >1.stdout
4、poll()
5、wait()
6、terminate()
7、pid
Maison développement back-end Tutoriel Python Introduction et utilisation du module de sous-processus

Introduction et utilisation du module de sous-processus

Jul 23, 2017 pm 01:46 PM
subprocess 模块

1. sous-processus et fonctions d'encapsulation couramment utilisées
Lors de l'exécution de Python, nous créons et exécutons un processus. Comme un processus Linux, un processus peut créer un processus enfant et laisser ce processus enfant exécuter un autre programme. En Python, nous utilisons le package de sous-processus dans la bibliothèque standard pour créer un sous-processus et exécuter un programme externe.
Le package de sous-processus définit plusieurs fonctions pour créer des sous-processus. Ces fonctions créent des sous-processus de différentes manières, nous pouvons donc en choisir une à utiliser en fonction de nos besoins. De plus, le sous-processus fournit également des outils pour gérer les flux et canaux standard afin d'utiliser la communication textuelle entre les processus.

subprocess.call()
Le processus parent attend que le processus enfant se termine
Renvoyer les informations de sortie (code de retour, équivalent au code de sortie Linux)

subprocess.check_call()
Parent Le processus attend la fin du sous-processus
Return 0
Vérifiez les informations de sortie. Si le code de retour n'est pas 0, déclenchez l'erreur subprocess.CalledProcessError Cet objet contient l'attribut returncode. ...sauf... pour vérifier

subprocess.check_output()
Le processus parent attend la fin du processus enfant
Renvoie le résultat de sortie du processus enfant à la sortie standard
Vérifiez les informations de sortie, si le code de retour n'est pas 0, déclenchez le sous-processus d'erreur.CalledProcessError, cet objet contient l'attribut returncode et l'attribut de sortie. L'attribut de sortie est le résultat de la sortie standard et peut être vérifié avec try.. .sauf....

1. Introduction

Le sous-processus a été introduit pour la première fois dans la version 2.4. Utilisé pour générer des processus enfants, connecter leurs entrées/sorties/erreurs via des tuyaux et obtenir leurs valeurs de retour.

Le sous-processus est utilisé pour remplacer plusieurs anciens modules et fonctions :

  • os.system

  • os.spawn*

  • os.popen*

  • popen2.*

  • commands.*

Lors de l'exécution de Python, nous Ils créent et exécutent tous un processus. Sous Linux, un processus peut créer un processus enfant et laisser ce processus enfant exécuter un autre programme. En python, nous utilisons le package de sous-processus dans la bibliothèque standard pour créer un sous-processus et exécuter un programme externe. Le package de sous-processus définit plusieurs fonctions pour créer des sous-processus. Ces fonctions créent des sous-processus de différentes manières, nous pouvons donc en choisir une à utiliser en fonction de nos besoins. De plus, le sous-processus fournit également des outils pour gérer les flux et canaux standard afin d'utiliser la communication textuelle entre les processus.

2. Utilisation d'anciens modules

1.os.system()

Exécuter les commandes du système d'exploitation, afficher le résultats à l'écran et renvoie uniquement l'état d'exécution de la commande (0 : succès, non-0 : échec)

import os

>>> a = os.system("df -Th")
Filesystem     Type   Size  Used Avail Use% Mounted on
/dev/sda3      ext4   1.8T  436G  1.3T  26% /
tmpfs          tmpfs   16G     0   16G   0% /dev/shm
/dev/sda1      ext4   190M  118M   63M  66% /boot

>>> a
0         # 0 表示执行成功


# 执行错误的命令
>>> res = os.system("list")
sh: list: command not found
>>> res
32512       # 返回非 0 表示执行错误
Copier après la connexion

 

os.popen().

Exécutez la commande du système d'exploitation et le résultat sera enregistré dans la mémoire, qui peut être lu à l'aide de la méthode read()

import os

>>> res = os.popen("ls -l")

# 将结果保存到内存中
>>> print res
<open file &#39;ls -l&#39;, mode &#39;r&#39; at 0x7f02d249c390>

# 用read()读取内容
>>> print res.read()
total 267508
-rw-r--r--  1 root root    260968 Jan 27  2016 AliIM.exe
-rw-------. 1 root root      1047 May 23  2016 anaconda-ks.cfg
-rw-r--r--  1 root root   9130958 Nov 18  2015 apache-tomcat-8.0.28.tar.gz
-rw-r--r--  1 root root         0 Oct 31  2016 badblocks.log
drwxr-xr-x  5 root root      4096 Jul 27  2016 certs-build
drwxr-xr-x  2 root root      4096 Jul  5 16:54 Desktop
-rw-r--r--  1 root root      2462 Apr 20 11:50 Face_24px.ico
Copier après la connexion

 

3. module de sous-processus

1. subprocess.run()

>>> import subprocess
# python 解析则传入命令的每个参数的列表
>>> subprocess.run(["df","-h"])
Filesystem            Size  Used Avail Use% Mounted on
/dev/mapper/VolGroup-LogVol00
                      289G   70G  204G  26% /
tmpfs                  64G     0   64G   0% /dev/shm
/dev/sda1             283M   27M  241M  11% /boot
CompletedProcess(args=[&#39;df&#39;, &#39;-h&#39;], returncode=0)

# 需要交给Linux shell自己解析,则:传入命令字符串,shell=True
>>> subprocess.run("df -h|grep /dev/sda1",shell=True)
/dev/sda1             283M   27M  241M  11% /boot
CompletedProcess(args=&#39;df -h|grep /dev/sda1&#39;, returncode=0)
Copier après la connexion

 🎜>

2. subprocess.call()

Exécuter la commande et renvoyer le résultat et l'état d'exécution de la commande, 0 ou non-0

>>> res = subprocess.call(["ls","-l"])
总用量 28
-rw-r--r--  1 root root     0 6月  16 10:28 1
drwxr-xr-x  2 root root  4096 6月  22 17:48 _1748
-rw-------. 1 root root  1264 4月  28 20:51 anaconda-ks.cfg
drwxr-xr-x  2 root root  4096 5月  25 14:45 monitor
-rw-r--r--  1 root root 13160 5月   9 13:36 npm-debug.log

# 命令执行状态
>>> res
0
Copier après la connexion
 

3. subprocess.check_call()

Exécutez la commande et renvoyez le résultat et le statut Normalement, il est 0. S'il y a une erreur d'exécution, un. une exception sera levée

>>> subprocess.check_call(["ls","-l"])
总用量 28
-rw-r--r--  1 root root     0 6月  16 10:28 1
drwxr-xr-x  2 root root  4096 6月  22 17:48 _1748
-rw-------. 1 root root  1264 4月  28 20:51 anaconda-ks.cfg
drwxr-xr-x  2 root root  4096 5月  25 14:45 monitor
-rw-r--r--  1 root root 13160 5月   9 13:36 npm-debug.log
0

>>> subprocess.check_call(["lm","-l"])
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
  File "/usr/lib64/python2.7/subprocess.py", line 537, in check_call
    retcode = call(*popenargs, **kwargs)
  File "/usr/lib64/python2.7/subprocess.py", line 524, in call
    return Popen(*popenargs, **kwargs).wait()
  File "/usr/lib64/python2.7/subprocess.py", line 711, in __init__
    errread, errwrite)
  File "/usr/lib64/python2.7/subprocess.py", line 1327, in _execute_child
    raise child_exception
OSError: [Errno 2] No such file or directory
Copier après la connexion

4. subprocess.getstatusoutput()

Accepte les commandes sous forme de chaînes et renvoie un résultat sous la forme d'un tuple Le premier élément est l'état d'exécution de la commande, et le second est le résultat de l'exécution

#执行正确
>>> subprocess.getstatusoutput(&#39;pwd&#39;)
(0, &#39;/root&#39;)

#执行错误
>>> subprocess.getstatusoutput(&#39;pd&#39;)
(127, &#39;/bin/sh: pd: command not found&#39;)
Copier après la connexion
 

5. subprocess.getoutput()

accepte les commandes sous forme de chaîne et met Retour du résultat de l'exécution

>>> subprocess.getoutput(&#39;pwd&#39;)
&#39;/root&#39;
Copier après la connexion
 

6. subprocess.check_output()

Exécutez la commande et renvoyez le résultat de l'exécution au lieu de Print

>>> res = subprocess.check_output("pwd")
>>> res
b&#39;/root\n&#39; # 结果以字节形式返回
Copier après la connexion
 

4. sous-processus. Popen()

En fait, la méthode ci-dessus est utilisée par subprocess , sont toutes des encapsulations de subprocess.Popen Jetons un coup d'œil à cette méthode Popen.

1.stdout

Stdout

>>> res = subprocess.Popen("ls /tmp/yum.log", shell=True, stdout=subprocess.PIPE)  # 使用管道
>>> res.stdout.read()    # 标准输出
b&#39;/tmp/yum.log\n&#39;

res.stdout.close()   # 关闭
Copier après la connexion

 

2. stderr

Erreur standard

>>> import subprocess
>>> res = subprocess.Popen("lm -l",shell=True,stdout=subprocess.PIPE,stderr=subprocess.PIPE)
# 标准输出为空
>>> res.stdout.read()
b&#39;&#39;

#标准错误中有错误信息
>>> res.stderr.read()
b&#39;/bin/sh: lm: command not found\n&#39;
Copier après la connexion

  

注意:上面的提到的标准输出都为啥都需要等于subprocess.PIPE,这个又是啥呢?原来这个是一个管道,这个需要画一个图来解释一下:

4、poll()

定时检查命令有没有执行完毕,执行完毕后返回执行结果的状态,没有执行完毕返回None

>>> res = subprocess.Popen("sleep 10;echo &#39;hello&#39;",shell=True,stdout=subprocess.PIPE,stderr=subprocess.PIPE)
>>> print(res.poll())
None
>>> print(res.poll())
None
>>> print(res.poll())
0
Copier après la connexion

  

5、wait()

等待命令执行完成,并且返回结果状态

>>> obj = subprocess.Popen("sleep 10;echo &#39;hello&#39;",shell=True,stdout=subprocess.PIPE,stderr=subprocess.PIPE)
>>> obj.wait()


# 中间会一直等待


0
Copier après la connexion

  

6、terminate()

结束进程

import subprocess

>>> res = subprocess.Popen("sleep 20;echo &#39;hello&#39;",shell=True,stdout=subprocess.PIPE,stderr=subprocess.PIPE)
>>> res.terminate()  # 结束进程
>>> res.stdout.read() 
b&#39;&#39;
Copier après la connexion

7、pid

获取当前执行子shell的程序的进程号

import subprocess

>>> res = subprocess.Popen("sleep 5;echo &#39;hello&#39;",shell=True,stdout=subprocess.PIPE,stderr=subprocess.PIPE)
>>> res.pid  # 获取这个linux shell 的 进程号
2778
Copier après la connexion

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Déclaration de ce site Web
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn

Outils d'IA chauds

Undresser.AI Undress

Undresser.AI Undress

Application basée sur l'IA pour créer des photos de nu réalistes

AI Clothes Remover

AI Clothes Remover

Outil d'IA en ligne pour supprimer les vêtements des photos.

Undress AI Tool

Undress AI Tool

Images de déshabillage gratuites

Clothoff.io

Clothoff.io

Dissolvant de vêtements AI

AI Hentai Generator

AI Hentai Generator

Générez AI Hentai gratuitement.

Article chaud

R.E.P.O. Crystals d'énergie expliqués et ce qu'ils font (cristal jaune)
3 Il y a quelques semaines By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O. Meilleurs paramètres graphiques
3 Il y a quelques semaines By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O. Comment réparer l'audio si vous n'entendez personne
3 Il y a quelques semaines By 尊渡假赌尊渡假赌尊渡假赌
WWE 2K25: Comment déverrouiller tout dans Myrise
3 Il y a quelques semaines By 尊渡假赌尊渡假赌尊渡假赌

Outils chauds

Bloc-notes++7.3.1

Bloc-notes++7.3.1

Éditeur de code facile à utiliser et gratuit

SublimeText3 version chinoise

SublimeText3 version chinoise

Version chinoise, très simple à utiliser

Envoyer Studio 13.0.1

Envoyer Studio 13.0.1

Puissant environnement de développement intégré PHP

Dreamweaver CS6

Dreamweaver CS6

Outils de développement Web visuel

SublimeText3 version Mac

SublimeText3 version Mac

Logiciel d'édition de code au niveau de Dieu (SublimeText3)

Le module d'extension WLAN s'est arrêté [correctif] Le module d'extension WLAN s'est arrêté [correctif] Feb 19, 2024 pm 02:18 PM

S'il y a un problème avec le module d'extension WLAN sur votre ordinateur Windows, cela peut entraîner une déconnexion d'Internet. Cette situation est souvent frustrante, mais heureusement, cet article propose quelques suggestions simples qui peuvent vous aider à résoudre ce problème et à rétablir le bon fonctionnement de votre connexion sans fil. Réparer le module d'extensibilité WLAN s'est arrêté Si le module d'extensibilité WLAN a cessé de fonctionner sur votre ordinateur Windows, suivez ces suggestions pour le réparer : Exécutez l'utilitaire de résolution des problèmes réseau et Internet pour désactiver et réactiver les connexions réseau sans fil Redémarrez le service de configuration automatique WLAN Modifier les options d'alimentation Modifier Paramètres d'alimentation avancés Réinstaller le pilote de la carte réseau Exécuter certaines commandes réseau Examinons-le maintenant en détail

Le module d'extensibilité WLAN ne peut pas démarrer Le module d'extensibilité WLAN ne peut pas démarrer Feb 19, 2024 pm 05:09 PM

Cet article détaille les méthodes permettant de résoudre l'événement ID10000, qui indique que le module d'extension LAN sans fil ne peut pas démarrer. Cette erreur peut apparaître dans le journal des événements du PC Windows 11/10. Le module d'extensibilité WLAN est un composant de Windows qui permet aux fournisseurs de matériel indépendants (IHV) et aux fournisseurs de logiciels indépendants (ISV) de fournir aux utilisateurs des fonctionnalités de réseau sans fil personnalisées. Il étend les fonctionnalités des composants réseau Windows natifs en ajoutant la fonctionnalité par défaut de Windows. Le module d'extensibilité WLAN est démarré dans le cadre de l'initialisation lorsque le système d'exploitation charge les composants réseau. Si le module d'extension LAN sans fil rencontre un problème et ne peut pas démarrer, vous pouvez voir un message d'erreur dans le journal de l'Observateur d'événements.

Python bibliothèques standard couramment utilisées et bibliothèques tierces module 2-sys Python bibliothèques standard couramment utilisées et bibliothèques tierces module 2-sys Apr 10, 2023 pm 02:56 PM

1. Introduction au module sys Le module os présenté précédemment est principalement destiné au système d'exploitation, tandis que le module sys de cet article est principalement destiné à l'interpréteur Python. Le module sys est un module fourni avec Python. C'est une interface permettant d'interagir avec l'interpréteur Python. Le module sys fournit de nombreuses fonctions et variables pour gérer différentes parties de l'environnement d'exécution Python. 2. Méthodes couramment utilisées du module sys Vous pouvez vérifier quelles méthodes sont incluses dans le module sys via la méthode dir() : import sys print(dir(sys))1.sys.argv-get les paramètres de ligne de commande sys. argv est utilisé pour implémenter la commande depuis l'extérieur du programme. Le programme reçoit des paramètres et il est capable d'obtenir la colonne des paramètres de la ligne de commande.

Programmation Python : explication détaillée des points clés de l'utilisation de tuples nommés Programmation Python : explication détaillée des points clés de l'utilisation de tuples nommés Apr 11, 2023 pm 09:22 PM

Préface Cet article continue de présenter le module de collection Python. Cette fois, il y introduit principalement les tuples nommés, c'est-à-dire l'utilisation de nommétuple. Sans plus tarder, commençons – n'oubliez pas d'aimer, de suivre et de transmettre ~ ^_^Création de tuples nommés La classe de tuple nommé nomméeTuples dans la collection Python donne un sens à chaque position dans le tuple et améliore la lisibilité du code sexuel et descriptif. Ils peuvent être utilisés partout où des tuples réguliers sont utilisés et ajoutent la possibilité d'accéder aux champs par nom plutôt que par index de position. Il provient des collections de modules intégrés Python. La syntaxe générale utilisée est : importer des collections XxNamedT

Comment utiliser DateTime en Python Comment utiliser DateTime en Python Apr 19, 2023 pm 11:55 PM

Toutes les données reçoivent automatiquement un « DOB » (Date de naissance) au début. Par conséquent, il est inévitable de rencontrer des données de date et d’heure lors du traitement des données à un moment donné. Ce didacticiel vous fera découvrir le module datetime en Python et l'utilisation de certaines bibliothèques périphériques telles que pandas et pytz. En Python, tout ce qui concerne la date et l'heure est géré par le module datetime, qui divise le module en 5 classes différentes. Les classes sont simplement des types de données qui correspondent à des objets. La figure suivante résume les 5 classes datetime en Python ainsi que les attributs et exemples couramment utilisés. 3 extraits utiles 1. Convertir la chaîne au format datetime, peut-être en utilisant datet

Explication détaillée du fonctionnement d'Ansible Explication détaillée du fonctionnement d'Ansible Feb 18, 2024 pm 05:40 PM

Le principe de fonctionnement d'Ansible peut être compris à partir de la figure ci-dessus : l'extrémité de gestion prend en charge trois méthodes locales, ssh et zeromq pour se connecter à l'extrémité gérée. La valeur par défaut est d'utiliser une connexion basée sur ssh. Cette partie correspond au module de connexion. dans le diagramme d'architecture ci-dessus ; il peut être connecté par type d'application. La classification HostInventory (liste d'hôtes) est effectuée d'autres manières. Le nœud de gestion implémente les opérations correspondantes via divers modules. Un seul module et l'exécution par lots d'une seule commande peuvent être appelés. -hoc ; le nœud de gestion peut implémenter un ensemble de tâches multiples via des playbooks. Implémenter un type de fonctions, telles que l'installation et le déploiement de services Web, la sauvegarde par lots de serveurs de base de données, etc. Nous pouvons simplement comprendre les playbooks au fur et à mesure que le système passe

Comment fonctionne l'importation de Python ? Comment fonctionne l'importation de Python ? May 15, 2023 pm 08:13 PM

Bonjour, je m'appelle somenzz, vous pouvez m'appeler frère Zheng. L'importation de Python est très intuitive, mais même ainsi, vous constaterez parfois que même si le package est là, nous rencontrerons toujours ModuleNotFoundError. Le chemin relatif est évidemment très correct, mais l'erreur ImportError:tentativerelativeimportwithnoknownparentpackage importe un module dans le même répertoire et. un différent. Les modules du répertoire sont complètement différents. Cet article vous aide à gérer facilement l'import en analysant certains problèmes souvent rencontrés lors de l'utilisation de l'import. Sur cette base, vous pouvez facilement créer des attributs.

Cet article résume les méthodes classiques et la comparaison des effets de l'amélioration et de la personnalisation des fonctionnalités dans l'estimation du CTR. Cet article résume les méthodes classiques et la comparaison des effets de l'amélioration et de la personnalisation des fonctionnalités dans l'estimation du CTR. Dec 15, 2023 am 09:23 AM

Dans l'estimation du CTR, la méthode traditionnelle utilise l'intégration de fonctionnalités + MLP, dans lesquels les fonctionnalités sont très critiques. Cependant, pour les mêmes caractéristiques, la représentation est la même dans différents échantillons. Cette façon de saisir le modèle en aval limitera la capacité d'expression du modèle. Afin de résoudre ce problème, une série de travaux connexes ont été proposés dans le domaine de l'estimation du CTR, appelés module d'amélioration des fonctionnalités. Le module d'amélioration des fonctionnalités corrige les résultats de sortie de la couche d'intégration en fonction de différents échantillons pour s'adapter à la représentation des caractéristiques de différents échantillons et améliorer la capacité d'expression du modèle. Récemment, l'Université de Fudan et Microsoft Research Asia ont publié conjointement une étude sur les travaux d'amélioration des fonctionnalités, comparant les méthodes de mise en œuvre et les effets de différents modules d'amélioration des fonctionnalités. Maintenant, introduisons un

See all articles