ホームページ > バックエンド開発 > Python チュートリアル > Python3 を使用して Linux スクリプト機能を実装する

Python3 を使用して Linux スクリプト機能を実装する

anonymity
リリース: 2019-04-19 13:20:21
転載
3995 人が閲覧しました

Python 3 はしばらくの間更新されました。Python2 と比較すると、さまざまな変更があります。Python 3 は Linux でも広く使用されています。ここでは主に、Linux を使用した Python3 スクリプトの実行コマンドをいくつか練習します。

まず、実行だけが必要な場合、または実行ステータスを取得するだけが必要な場合は、os.system を使用して上記のコード

#!/usr/bin/env python3
print ('hello,world')
import os
val2 =  os.system('cd trb && cd trb')
val3 = os.system('ls')
print('val2 is ',val2)
ログイン後にコピー

を呼び出すことができます。 val2 のコードが正常に実行された場合、つまり 2 レベルの trb フォルダーがある場合、val2 の値は 0 ですが、それ以外の場合は 256

2 行の呼び出しには継承がありません。連続的に実行し、&& (シェル構文) を 1 つのステートメントに追加します。)

印刷する前に、画面には実行結果も表示されます

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) メソッドは、操作の出力ですが、印刷しないと画面には何も表示されません。

たとえば、

val4 = os.popen('cd trb && cd trb')
val5 = os.popen('ls')print('开始PRINT')print(val4.read())print(val5.read())
ログイン後にコピー

は次のように表示されます。

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
ログイン後にコピー

ここでの出力はファイルのようなオブジェクトであり、read または readlines が呼び出された場合のトラバースにも使用できます。

究極の武器、サブプロセス

py3.5 サブプロセス後の推奨モジュール

オンラインコマンドチュートリアルでは 2 の関数で、3 で削除されましたが、サブプロセスを通じて呼び出すことができます。次のコマンドがあります:subprocess.getstatusoutput
cmd

<span class="pre">シェルで <span class="pre">cmd</span> を実行します。 </span>(status,

output) 2 つの要素のタプルを返します

3.4 の後に勝利サポートを追加します #subprocess.getoutputcmd

##cmd を実行して結果を返します

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)
ログイン後にコピー

上記はコードの出力です

:

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
ログイン後にコピー

出力の場所文字列。印刷しないと表示されません。

新しいバージョンでは、一般的な問題を解決するために subprocess.run() を使用することをお勧めします。

subprocess.run()、subprocess.call()、subprocess.check_call()、および subprocess.check_output() はすべて、subprocess.Popen をカプセル化することによって実装された高レベル関数であるため、より複雑な関数が必要な場合は、サブプロセスを通じて完了できます。Popen

run はデフォルトでは出力を返しません。コマンドと実行ステータスのみを返します。

recomd = subprocess.run([&#39;ls&#39;,&#39;-l&#39;])#等待命令执行完成后会在屏幕输出执行结果,然后返回一个包含执行结果的CompletedProcess类的实例。print(&#39;输出recmd\n&#39;,recomd)print(recomd.returncode)
ログイン後にコピー

出力は次のとおりです:

出力を返したい場合は、パラメータを追加し、subprocess.PIPE を stdout および stderr に渡してから、返された CompletedProcess クラス インスタンスの stdout および stderr 属性を渡すか、対応するコンテンツをキャプチャします。 universal_newlines:

このパラメータは入力および出力データ形式に影響します。たとえば、その値のデフォルトは False です。このとき、stdout および stderr の出力はバイト シーケンスです。 ; このパラメータの値が True の場合、stdout と stderr の出力は文字列になります。

全体のコードは次のとおりです:

#!/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)
ログイン後にコピー
参考: python3.5 公式ドキュメント: https://docs.python.org/3.5/library/subprocess.html

Python の利用が広がっており、Linux もサーバーとして大きな可能性を秘めており、Python を使用して Linux スクリプト操作を実装すると、サーバー側の操作が簡素化され、制御性が向上します。 ###

以上がPython3 を使用して Linux スクリプト機能を実装するの詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

関連ラベル:
ソース:cnblogs.com
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート