Maison > Article > développement back-end > Utiliser python3 pour implémenter les fonctions de script Linux
Python 3 a été mis à jour depuis un certain temps. Par rapport à Python 2, il existe de nombreux changements différents. Python 3 est également largement utilisé ici, nous pratiquons principalement certaines commandes d'exécution de script Python 3 sous Linux.
Tout d'abord, si vous avez seulement besoin d'exécuter, ou si vous avez seulement besoin d'obtenir l'état d'exécution, vous pouvez utiliser os.system pour appeler le code ci-dessus
#!/usr/bin/env python3 print ('hello,world') import os val2 = os.system('cd trb && cd trb') val3 = os.system('ls') print('val2 is ',val2)
. Si le code dans val2 est exécuté avec succès, c'est-à-dire qu'il y a deux niveaux de dossiers trb, la valeur de val2 est 0, sinon elle est 256
L'appel sur deux lignes n'a pas d'héritage Si vous le souhaitez. exécutez en continu, ajoutez && dans une seule instruction (syntaxe Shell)
Avant l'impression, l'écran affichera également le résultat de l'exécution
hello,worldsh: line 0: cd: trb: 没有那个文件或目录 Abcd.py automesh.sh Cal_Ori fold.txt Linux_py_temp.py meshedjob.rec new_geom onc143314 trb val2 is 256
méthode os.popen(cmd), vous ne pouvez obtenir le résultat de l'opération, mais si vous n'imprimez pas, il n'y aura rien à l'écran non plus.
Par exemple,
val4 = os.popen('cd trb && cd trb') val5 = os.popen('ls')print('开始PRINT')print(val4.read())print(val5.read())
s'affiche comme suit
hello,world 开始PRINT/bin/sh: line 0: cd: trb: 没有那个文件或目录 Abcd.py automesh.shCal_Ori fold.txt Linux_py_temp.py meshedjob.rec new_geom onc143314 trb
La sortie ici est un objet de type fichier, qui peut également être parcouru en appelant read ou lire les lignes.
###########
L'arme ultime, le sous-processus
Le module sous-processus recommandé après py3.5
En ligne Le les commandes du didacticiel sont des fonctions en 2 et ont été supprimées en 3, mais elles peuvent être appelées via un sous-processus
a les commandes suivantes :
subprocess.
getstatusoutput
(<.> cmd )
cmd dans le shell. (status,
<span class="pre">(status, <span class="pre">output) 返回2个元素的元组</span></span>
output) renvoie un tuple de 2 éléments
3.4 Puis ajouter le support Win
subprocess.
getoutput
(cmd )
legacycmd = subprocess.getstatusoutput('ls -l')print('subprocess.getstatusoutput 输出',legacycmd) legacycmd2 = subprocess.getoutput('ls -l')print('subprocess.getoutput 输出',legacycmd2)Exécuter cmd et renvoyer le résultat
Ce ci-dessus est le code
subprocess.getstatusoutput 输出 (0, '总用量 48\n-rwxr--r-- 1 para036 bjpara 516 4月 16 2018 Abcd.py\n-rwxr--r-- 1 para036 bjpara 1619 4月 16 16:58 automesh_onpsn_fortest.sh\n-rwxr--r-- 1 para036 bjpara 1616 4月 15 14:31 automesh.sh\ndrwxr-xr-x 5 para036 bjpara 4096 4月 15 14:31 Cal_Ori\n-rw-r --r-- 1 para036 bjpara 32 4月 16 16:56 fold.txt\n-rwxr--r-- 1 para036 bjpara 1530 4月 15 14:45 Linux_py_temp.py\n-rw-r--r-- 1 para036 bjpara 27 4月 15 14:43 meshedjob.rec\ndrwxr-xr-x 2 para036 bjpara 4096 4月 15 14:31 new_geom\ndrwxr-xr-x 5 para036 bjpara 4096 4月 15 14:51 onc143314\ndrwx r-xr-x 5 para036 bjpara 4096 4月 16 17:05 onc16165650\ndrwxr-xr-x 5 para036 bjpara 4096 4月 16 16:46 onc163840\ndrwxr-xr-x 2 para036 bjpara 4096 4 月 15 14:32 trb') subprocess.getoutput 输出 总用量 48 -rwxr--r-- 1 para036 bjpara 516 4月 16 2018 Abcd.py -rwxr--r-- 1 para036 bjpara 1619 4月 16 16:58 automesh_onpsn_fortest.sh -rwxr--r-- 1 para036 bjpara 1616 4月 15 14:31 automesh.sh drwxr-xr-x 5 para036 bjpara 4096 4月 15 14:31 Cal_Ori -rw-r--r-- 1 para036 bjpara 32 4月 16 16:56 fold.txt -rwxr--r-- 1 para036 bjpara 1530 4月 15 14:45 Linux_py_temp.py -rw-r--r-- 1 para036 bjpara 27 4月 15 14:43 meshedjob.rec drwxr-xr-x 2 para036 bjpara 4096 4月 15 14:31 new_geom drwxr-xr-x 5 para036 bjpara 4096 4月 15 14:51 onc143314 drwxr-xr-x 5 para036 bjpara 4096 4月 16 17:05 onc16165650 drwxr-xr-x 5 para036 bjpara 4096 4月 16 16:46 onc163840 drwxr-xr-x 2 para036 bjpara 4096 4月 15 14:32 trbsortie :
Où la sortie est une chaîne. S'il n'est pas imprimé, il ne sera pas affiché
La nouvelle version recommande d'utiliser subprocess.run() pour résoudre les problèmes généraux.
subprocess.run(), subprocess.call(), subprocess.check_call() et subprocess.check_output() sont toutes des fonctions de haut niveau implémentées en encapsulant subprocess.Popen, donc si nous avons besoin d'une fonction plus complexe, il peut être complété via subprocess.Popen
recomd = subprocess.run(['ls','-l'])#等待命令执行完成后会在屏幕输出执行结果,然后返回一个包含执行结果的CompletedProcess类的实例。print('输出recmd\n',recomd)print(recomd.returncode)Run ne renverra pas de sortie par défaut, mais renvoie uniquement la commande et l'état d'exécution
La sortie est la suivante :
Si vous souhaitez renvoyer une sortie, ajoutez des paramètres, transmettez subprocess.PIPE à stdout et stderr, puis vous pourrez transmettre les attributs stdout et stderr de l'instance de classe CompletedProcess renvoyée ou capturer le contenu correspondant ; universal_newlines :
Ce paramètre affecte le format des données d'entrée et de sortie. Par exemple, sa valeur par défaut est False. À ce stade, la sortie de stdout et stderr. est une séquence d'octets lorsque la valeur de ce paramètre Lorsqu'elle est définie sur True, la sortie vers stdout et stderr sont des chaînes.
#!/usr/bin/env python3 print ('hello,world') import os # val2 = os.system('cd trb && cd trb') # val3 = os.system('ls') # print('val2 is ',val2) # val4 = os.popen('cd trb && cd trb') # val5 = os.popen('ls') # print('开始PRINT') # print(val4.read()) # print(val5.read()) import subprocess recomd = subprocess.run(['ls','-l']) #等待命令执行完成后会在屏幕输出执行结果,然后返回一个包含执行结果的CompletedProcess类的实例。 print('输出recmd\n',recomd) print(recomd.returncode) print('传递参数') recomdouterr = subprocess.run( ['ls','-l'],stdout=subprocess.PIPE,stderr=subprocess.PIPE,universal_newlines=True) print('输出outerr',recomdouterr.stdout,recomdouterr.stderr) print('传递参数2') recomdouterr = subprocess.run( ['ls','-l'],stdout=subprocess.PIPE,universal_newlines=True) print('输出outerr',recomdouterr.stdout) print(len( recomdouterr.stdout.strip().split('\n') )) print(recomdouterr.stdout.strip().split('\n')[-1]) # legacycmd = subprocess.getstatusoutput('ls -l') # # print('subprocess.getstatusoutput 输出',legacycmd) # # legacycmd2 = subprocess.getoutput('ls -l') # # print('subprocess.getoutput 输出',legacycmd2)Le code total est le suivant :
Référence : python3.5 Documentation officielle :
https://docs.python.org/3.5/library/subprocess.htmlPython est utilisé de plus en plus largement, et Linux a également un grand potentiel en tant que serveur. L'utilisation de Python pour implémenter les opérations de script Linux simplifie les opérations côté serveur et améliore la contrôlabilité.
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!