Maison  >  Article  >  développement back-end  >  Le sous-processus exécute les commandes Linux par lots en python

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

不言
不言original
2018-04-27 11:55:433253parcourir

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
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
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
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>

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)

>>> 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;)

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;)

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!

Déclaration:
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