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,
3.4 の後に勝利サポートを追加します #subprocess.getoutput(cmd )
##cmd を実行して結果を返します
legacycmd = subprocess.getstatusoutput('ls -l')print('subprocess.getstatusoutput 输出',legacycmd) legacycmd2 = subprocess.getoutput('ls -l')print('subprocess.getoutput 输出',legacycmd2)
上記はコードの出力です
:
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 trb
出力の場所文字列。印刷しないと表示されません。
新しいバージョンでは、一般的な問題を解決するために subprocess.run() を使用することをお勧めします。
subprocess.run()、subprocess.call()、subprocess.check_call()、および subprocess.check_output() はすべて、subprocess.Popen をカプセル化することによって実装された高レベル関数であるため、より複雑な関数が必要な場合は、サブプロセスを通じて完了できます。Popen
run はデフォルトでは出力を返しません。コマンドと実行ステータスのみを返します。
recomd = subprocess.run(['ls','-l'])#等待命令执行完成后会在屏幕输出执行结果,然后返回一个包含执行结果的CompletedProcess类的实例。print('输出recmd\n',recomd)print(recomd.returncode)
出力は次のとおりです:
出力を返したい場合は、パラメータを追加し、subprocess.PIPE を stdout および stderr に渡してから、返された CompletedProcess クラス インスタンスの stdout および stderr 属性を渡すか、対応するコンテンツをキャプチャします。 universal_newlines:
このパラメータは入力および出力データ形式に影響します。たとえば、その値のデフォルトは False です。このとき、stdout および stderr の出力はバイト シーケンスです。 ; このパラメータの値が True の場合、stdout と stderr の出力は文字列になります。 全体のコードは次のとおりです:#!/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)
以上がPython3 を使用して Linux スクリプト機能を実装するの詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。