Heim > Artikel > Backend-Entwicklung > Verwendung von Python3 zur Implementierung von Linux-Skriptfunktionen
Python 3 wurde seit einiger Zeit aktualisiert. Python 3 wird auch häufig unter Linux verwendet.
Wenn Sie zunächst nur ausführen oder nur den Ausführungsstatus abrufen müssen, können Sie os.system verwenden, um
#!/usr/bin/env python3 print ('hello,world') import os val2 = os.system('cd trb && cd trb') val3 = os.system('ls') print('val2 is ',val2)
den obigen Code aufzurufen. Wenn der Code in val2 erfolgreich ausgeführt wird, das heißt, es gibt zwei Ebenen von trb-Ordnern, ist der Wert von val2 0, andernfalls 256
Der zweizeilige Aufruf hat keine Vererbung Kontinuierlich ausführen, && in einer Anweisung hinzufügen (Shell-Syntax)
Vor dem Drucken wird auf dem Bildschirm auch das Ausführungsergebnis angezeigt
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
os.popen(cmd)-Methode, Sie können nur die Ausgabe erhalten des Vorgangs, aber wenn Sie nicht drucken, wird nichts auf dem Bildschirm angezeigt.
Zum Beispiel wird
val4 = os.popen('cd trb && cd trb') val5 = os.popen('ls')print('开始PRINT')print(val4.read())print(val5.read())
wie folgt angezeigt:
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
Die Ausgabe hier ist ein dateiähnliches Objekt, das auch durch Aufrufe von read oder readlines durchlaufen werden kann.
###########
Die ultimative Waffe, Unterprozess
Der nach py3.5 empfohlene Modul-Unterprozess
Online The Befehle im Tutorial sind Funktionen in 2 und wurden in 3 gelöscht, aber sie können über den Unterprozess aufgerufen werden.
hat die folgenden Befehle:
subprocess.
getstatusoutput
( cmd )
kehrt zurück, um cmd in der Shell auszuführen. <code class="docutils literal"><span class="pre">(status, <span class="pre">output) 返回2个元素的元组</span></span>
(status,
3.4 Dann Win-Unterstützung hinzufügen
subprocess.
getoutput
(cmd )
legacycmd = subprocess.getstatusoutput('ls -l')print('subprocess.getstatusoutput 输出',legacycmd) legacycmd2 = subprocess.getoutput('ls -l')print('subprocess.getoutput 输出',legacycmd2)Oben ist der CodeAusgabe:
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 trbWobei die Ausgabe eine Zeichenfolge ist. Wenn es nicht gedruckt wird, wird es nicht angezeigt Die neue Version empfiehlt die Verwendung von subprocess.run() zur Lösung allgemeiner Probleme. subprocess.run(), subprocess.call(), subprocess.check_call() und subprocess.check_output() sind alles erweiterte Funktionen, die durch Kapselung von subprocess.Popen implementiert werden. Wenn wir also komplexere Funktionen benötigen, ist dies möglich durch subprocess.Popen abgeschlossen werden Run gibt standardmäßig keine Ausgabe zurück, sondern nur der Befehl und der Ausführungsstatus werden zurückgegeben
recomd = subprocess.run(['ls','-l'])#等待命令执行完成后会在屏幕输出执行结果,然后返回一个包含执行结果的CompletedProcess类的实例。print('输出recmd\n',recomd)print(recomd.returncode)Die Ausgabe lautet wie folgt:
Wenn Sie eine Ausgabe zurückgeben möchten, fügen Sie Parameter hinzu, übergeben Sie subprocess.PIPE an stdout und stderr und übergeben Sie dann die Attribute stdout und stderr der zurückgegebenen CompletedProcess-Klasseninstanz oder erfassen Sie den entsprechenden Inhalt
universal_newlines: Dieser Parameter beeinflusst das Eingabe- und Ausgabedatenformat. Zu diesem Zeitpunkt ist die Ausgabe von stdout und stderr beispielsweise eine Bytefolge ; wenn der Wert dieses Parameters auf „True“ gesetzt ist, ist die Ausgabe von stdout und stderr eine Zeichenfolge.Der Gesamtcode lautet wie folgt:
#!/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)Referenz: python3.5 Offizielle Dokumentation:
https://docs.python.org/3.5/library/subprocess.html
Python wird immer häufiger verwendet, und Linux hat auch als Server großes Potenzial. Die Verwendung von Python zur Implementierung von Linux-Skriptoperationen vereinfacht serverseitige Vorgänge und verbessert die Steuerbarkeit.Das obige ist der detaillierte Inhalt vonVerwendung von Python3 zur Implementierung von Linux-Skriptfunktionen. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!