Le sous-processus exécute les commandes Linux par lots en python

不言
Libérer: 2018-04-27 11:55:43
original
3265 Les gens l'ont consulté

Cet article explique en détail comment utiliser un sous-processus pour exécuter des commandes Linux par lots en Python. Les amis intéressés peuvent s'y référer.

Les modules et fonctions pertinents qui peuvent exécuter des commandes shell sont :

  • os.system

  • os.spawn

  • os.popen --obsolete

  • popen --obsolete

  • commandes --obsolète, 3 . Supprimé de

sous-processus

appel

exécute la commande et renvoie le code d'état

>>> import subprocess
>>> ret = subprocess.call(["ls", "-l"], shell=False)
total 4684
-rw-r--r-- 1 root root   454 May 5 12:20 aa.py
-rw-r--r-- 1 root root    0 May 8 16:51 aa.txt
-rw-r--r-- 1 root root 4783286 Apr 11 16:39 DockerToolbox.exe
-rw-r--r-- 1 root root   422 May 5 12:20 ip_info.txt
-rw-r--r-- 1 root root   718 Apr 19 10:52 my.cnf
>>> ret = subprocess.call("ls -l", shell=True)
total 4684
-rw-r--r-- 1 root root   454 May 5 12:20 aa.py
-rw-r--r-- 1 root root    0 May 8 16:51 aa.txt
-rw-r--r-- 1 root root 4783286 Apr 11 16:39 DockerToolbox.exe
-rw-r--r-- 1 root root   422 May 5 12:20 ip_info.txt
-rw-r--r-- 1 root root   718 Apr 19 10:52 my.cnf
>>> print(ret)
0
Copier après la connexion
check_call

Exécutez la commande, si le code d'état d'exécution est 0, retournez 0, sinon lancez un exception

>>> subprocess.check_call(["ls", "-l"])
total 4684
-rw-r--r-- 1 root root   454 May 5 12:20 aa.py
-rw-r--r-- 1 root root    0 May 8 16:51 aa.txt
-rw-r--r-- 1 root root 4783286 Apr 11 16:39 DockerToolbox.exe
-rw-r--r-- 1 root root   422 May 5 12:20 ip_info.txt
-rw-r--r-- 1 root root   718 Apr 19 10:52 my.cnf
0
>>> subprocess.check_call("exit 1", shell=True)
Traceback (most recent call last):
 File "<stdin>", line 1, in <module>
 File "/usr/local/python3.5/lib/python3.5/subprocess.py", line 581, in check_call
  raise CalledProcessError(retcode, cmd)
subprocess.CalledProcessError: Command &#39;exit 1&#39; returned non-zero exit status 1
Copier après la connexion
check_output

Exécutez la commande, si le code d'état est 0, retournez le résultat de l'exécution, sinon Throw exception

>>> subprocess.check_output(["echo", "Hello World!"])
b&#39;Hello World!\n&#39;
>>> subprocess.check_output("exit 1", shell=True)
Traceback (most recent call last):
 File "<stdin>", line 1, in <module>
 File "/usr/local/python3.5/lib/python3.5/subprocess.py", line 626, in check_output
  **kwargs).stdout
 File "/usr/local/python3.5/lib/python3.5/subprocess.py", line 708, in run
  output=stdout, stderr=stderr)
subprocess.CalledProcessError: Command &#39;exit 1&#39; returned non-zero exit status 1
Copier après la connexion
subprocess.Popen(...)

est utilisé pour exécuter une commande système complexe

Paramètres :


args : commande shell, qui peut être un type de chaîne ou de séquence (comme une liste, un tuple)

bufsize : Spécifiez la mise en mémoire tampon. 0 pas de mise en mémoire tampon, mise en mémoire tampon de 1 ligne, autres tailles de tampon, mise en mémoire tampon système négative


stdin, stdout, stderr : représentent respectivement les poignées d'entrée, de sortie et d'erreur standard du programme


preexec_fn : valide uniquement sous la plateforme Unix, utilisé pour spécifier un objet appelable, qui sera appelé avant l'exécution du processus enfant


close_sfs : sous la plateforme Windows, si close_fds Si défini sur True, le le processus enfant nouvellement créé n’héritera pas des canaux d’entrée, de sortie et d’erreur du processus parent.


Vous ne pouvez donc pas définir close_fds sur True et rediriger l'entrée, la sortie et l'erreur standard (stdin, stdout, stderr) du processus enfant en même temps.


shell : Idem que ci-dessus


cwd : utilisé pour définir le répertoire actuel du processus enfant


env : utilisé pour spécifier le variable d'environnement du processus enfant. Si env = None, les variables d'environnement du processus enfant seront héritées du processus parent.


universal_newlines : Différents systèmes ont des sauts de ligne différents, True -> Acceptez d'utiliser n


startupinfo et createionflags ne sont valables que sous Windows


Sera transmis à la fonction CreateProcess() sous-jacente pour définir certaines propriétés du processus enfant, telles que : l'apparence de la fenêtre principale, la priorité du processus, etc.


Exécuter des commandes ordinaires

Il existe deux types de commandes saisies dans le terminal :
>>> import subprocess
>>> ret1 = subprocess.Popen(["mkdir","t1"])
>>> ret2 = subprocess.Popen("mkdir t2", shell=True)
>>> print(ret1)
<subprocess.Popen object at 0x7f4d7609dd30>
>>> print(ret2)
<subprocess.Popen object at 0x7f4d7609dc18>
Copier après la connexion

Entrée pour obtenir la sortie, telle que : ifconfig

  • Entrez dans un certain environnement, dépendez-en puis entrez-le, tel que : python

>>> import subprocess
>>> obj = subprocess.Popen("mkdir t3", shell=True, cwd=&#39;/tmp/&#39;,)
>>> import subprocess
>>> obj = subprocess.Popen(["python"], stdin=subprocess.PIPE, stdout=subprocess.PIPE, stderr=subprocess.PIPE, universal_newlines=True)
>>> obj.stdin.write("print(1)\n")
9
>>> obj.stdin.write("print(2)")
8
>>> obj.stdin.close()
>>> cmd_out = obj.stdout.read()
>>> obj.stdout.close()
>>> cmd_error = obj.stderr.read()
>>> obj.stderr.close()
>>> print(cmd_out)
1
2
>>> print(cmd_error)
Copier après la connexion

>>> import subprocess
>>> 
>>> obj = subprocess.Popen(["python"], stdin=subprocess.PIPE, stdout=subprocess.PIPE, stderr=subprocess.PIPE, universal_newlines=True)
>>> obj.stdin.write("print(1)\n")
9
>>> obj.stdin.write("print(2)")
8
>>> 
>>> out_error_list = obj.communicate()
>>> print(out_error_list)
(&#39;1\n2\n&#39;, &#39;&#39;)
Copier après la connexion

Recommandations associées :
>>> obj = subprocess.Popen(["python"], stdin=subprocess.PIPE, stdout=subprocess.PIPE, stderr=subprocess.PIPE, universal_newlines=True)
>>> out_error_list = obj.communicate(&#39;print("hello")&#39;)
>>> print(out_error_list)
(&#39;hello\n&#39;, &#39;&#39;)
Copier après la connexion

Utilisez Python pour exécuter des scripts shell et transférer dynamiquement les paramètres et les utilisations de base du sous-processus

Introduction et utilisation du module de sous-processus

Introduction détaillée au Package de sous-processus de la bibliothèque standard Python

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!

Étiquettes associées:
source:php.cn
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
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal
À propos de nous Clause de non-responsabilité Sitemap
Site Web PHP chinois:Formation PHP en ligne sur le bien-être public,Aidez les apprenants PHP à grandir rapidement!