Verwendung von Python3 zur Implementierung von Linux-Skriptfunktionen

anonymity
Freigeben: 2019-04-19 13:20:21
nach vorne
3867 Leute haben es durchsucht

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)
Nach dem Login kopieren

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
Nach dem Login kopieren

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())
Nach dem Login kopieren

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
Nach dem Login kopieren

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,

output) gibt ein Tupel aus 2 Elementen zurück

3.4 Dann Win-Unterstützung hinzufügen

subprocess.getoutput (cmd )

Führen Sie cmd aus und geben Sie das Ergebnis zurück

legacycmd = subprocess.getstatusoutput(&#39;ls -l&#39;)print(&#39;subprocess.getstatusoutput 输出&#39;,legacycmd)
legacycmd2 = subprocess.getoutput(&#39;ls -l&#39;)print(&#39;subprocess.getoutput 输出&#39;,legacycmd2)
Nach dem Login kopieren

Oben ist der Code

Ausgabe:

subprocess.getstatusoutput 输出 (0, &#39;总用量 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&#39;)
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 trb
Nach dem Login kopieren

Wobei 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([&#39;ls&#39;,&#39;-l&#39;])#等待命令执行完成后会在屏幕输出执行结果,然后返回一个包含执行结果的CompletedProcess类的实例。print(&#39;输出recmd\n&#39;,recomd)print(recomd.returncode)
Nach dem Login kopieren
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 (&#39;hello,world&#39;)
import os
# val2 =  os.system(&#39;cd trb && cd trb&#39;)
# val3 = os.system(&#39;ls&#39;)
# print(&#39;val2 is &#39;,val2)
# val4 = os.popen(&#39;cd trb && cd trb&#39;)
# val5 = os.popen(&#39;ls&#39;)
# print(&#39;开始PRINT&#39;)
# print(val4.read())
# print(val5.read())
import subprocess
recomd = subprocess.run([&#39;ls&#39;,&#39;-l&#39;])
#等待命令执行完成后会在屏幕输出执行结果,然后返回一个包含执行结果的CompletedProcess类的实例。
print(&#39;输出recmd\n&#39;,recomd)
print(recomd.returncode)
print(&#39;传递参数&#39;)
recomdouterr = subprocess.run( [&#39;ls&#39;,&#39;-l&#39;],stdout=subprocess.PIPE,stderr=subprocess.PIPE,universal_newlines=True)
print(&#39;输出outerr&#39;,recomdouterr.stdout,recomdouterr.stderr)
print(&#39;传递参数2&#39;)
recomdouterr = subprocess.run( [&#39;ls&#39;,&#39;-l&#39;],stdout=subprocess.PIPE,universal_newlines=True)
print(&#39;输出outerr&#39;,recomdouterr.stdout)
print(len( recomdouterr.stdout.strip().split(&#39;\n&#39;) ))
print(recomdouterr.stdout.strip().split(&#39;\n&#39;)[-1])
# legacycmd = subprocess.getstatusoutput(&#39;ls -l&#39;)
#
# print(&#39;subprocess.getstatusoutput 输出&#39;,legacycmd)
#
# legacycmd2 = subprocess.getoutput(&#39;ls -l&#39;)
#
# print(&#39;subprocess.getoutput 输出&#39;,legacycmd2)
Nach dem Login kopieren
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!

Verwandte Etiketten:
Quelle:cnblogs.com
Erklärung dieser Website
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage
Über uns Haftungsausschluss Sitemap
Chinesische PHP-Website:Online-PHP-Schulung für das Gemeinwohl,Helfen Sie PHP-Lernenden, sich schnell weiterzuentwickeln!