ホームページ  >  記事  >  バックエンド開発  >  サブプロセスはPythonでLinuxコマンドをバッチで実行します

サブプロセスはPythonでLinuxコマンドをバッチで実行します

不言
不言オリジナル
2018-04-27 11:55:433252ブラウズ

この記事では、サブプロセスを使用して Python で Linux コマンドをバッチ実行する方法を詳しく説明します。興味のある方は参照してください。

シェルコマンドを実行できる関連モジュールと関数は次のとおりです:

  • os.system

  • os.spawn

  • os.popen --Abandoned

  • popen --Abandoned

  • コマンド--放棄され、3.x で削除されました

上記のモジュールの機能とシェルコマンドの実行に関連する機能はすべて subprocess モジュールに実装されており、より豊富な機能を提供します。

subprocess

call

コマンドを実行してステータスコードを返す

>>> import subprocess
>>> ret = subprocess.call(["ls", "-l"], shell=False)
total 4684
-rw-r--r-- 1 root root   454 May 5 12:20 aa.py
-rw-r--r-- 1 root root    0 May 8 16:51 aa.txt
-rw-r--r-- 1 root root 4783286 Apr 11 16:39 DockerToolbox.exe
-rw-r--r-- 1 root root   422 May 5 12:20 ip_info.txt
-rw-r--r-- 1 root root   718 Apr 19 10:52 my.cnf
>>> ret = subprocess.call("ls -l", shell=True)
total 4684
-rw-r--r-- 1 root root   454 May 5 12:20 aa.py
-rw-r--r-- 1 root root    0 May 8 16:51 aa.txt
-rw-r--r-- 1 root root 4783286 Apr 11 16:39 DockerToolbox.exe
-rw-r--r-- 1 root root   422 May 5 12:20 ip_info.txt
-rw-r--r-- 1 root root   718 Apr 19 10:52 my.cnf
>>> print(ret)
0

check_call

コマンドを実行して0を返す実行ステータス コードは 0、それ以外の場合例外をスローします

>>> subprocess.check_call(["ls", "-l"])
total 4684
-rw-r--r-- 1 root root   454 May 5 12:20 aa.py
-rw-r--r-- 1 root root    0 May 8 16:51 aa.txt
-rw-r--r-- 1 root root 4783286 Apr 11 16:39 DockerToolbox.exe
-rw-r--r-- 1 root root   422 May 5 12:20 ip_info.txt
-rw-r--r-- 1 root root   718 Apr 19 10:52 my.cnf
0
>>> subprocess.check_call("exit 1", shell=True)
Traceback (most recent call last):
 File "<stdin>", line 1, in <module>
 File "/usr/local/python3.5/lib/python3.5/subprocess.py", line 581, in check_call
  raise CalledProcessError(retcode, cmd)
subprocess.CalledProcessError: Command &#39;exit 1&#39; returned non-zero exit status 1

check_output

コマンドを実行します。ステータスコードが0の場合は実行結果が返され、それ以外の場合は例外がスローされます

>>> subprocess.check_output(["echo", "Hello World!"])
b&#39;Hello World!\n&#39;
>>> subprocess.check_output("exit 1", shell=True)
Traceback (most recent call last):
 File "<stdin>", line 1, in <module>
 File "/usr/local/python3.5/lib/python3.5/subprocess.py", line 626, in check_output
  **kwargs).stdout
 File "/usr/local/python3.5/lib/python3.5/subprocess.py", line 708, in run
  output=stdout, stderr=stderr)
subprocess.CalledProcessError: Command &#39;exit 1&#39; returned non-zero exit status 1

subprocess.Popen( ...)

複雑なシステム コマンドの実行に使用されます

パラメータ:

args: 文字列またはシーケンス タイプ (リスト、タプルなど) のシェル コマンド

bufsize: バッファを指定します。 0 バッファリングなし、1 行バッファリング、その他のバッファ サイズ、負のシステム バッファリング

stdin、stdout、stderr: それぞれプログラムの標準入力、出力、およびエラー ハンドルを表します

preexec_fn: Unix プラットフォームでのみ有効呼び出し可能なオブジェクトを指定するには、子プロセスが実行される前に呼び出されます

close_sfs: Windows プラットフォームでは、close_fds が True に設定されている場合、新しく作成された子プロセスは親プロセスの入力、出力、エラー パイプを継承しません。 。

そのため、close_fds を True に設定して、子プロセスの標準入力、出力、エラー (stdin、stdout、stderr) を同時にリダイレクトすることはできません。

shell: 上記と同じ

cwd: 子プロセスの現在のディレクトリを設定するために使用されます

env: 子プロセスの環境変数を指定するために使用されます。 env = None の場合、子プロセスの環境変数は親プロセスから継承されます。

universal_newlines: システムによって改行が異なります。True -> n

startupinfo と createionflags は Windows でのみ有効です

は子プロセスを設定するために基になる CreateProcess() 関数に渡されます。メインウィンドウの外観、プロセスの優先順位などのプロパティ。

通常のコマンドを実行する

>>> import subprocess
>>> ret1 = subprocess.Popen(["mkdir","t1"])
>>> ret2 = subprocess.Popen("mkdir t2", shell=True)
>>> print(ret1)
<subprocess.Popen object at 0x7f4d7609dd30>
>>> print(ret2)
<subprocess.Popen object at 0x7f4d7609dc18>

ターミナルによって入力されるコマンドは 2 つのタイプに分けられます:

  • 次のような出力を取得します。 ifconfig

  • 特定の環境を入力し、それに依存して、次のように入力します。 python

>>> import subprocess
>>> obj = subprocess.Popen("mkdir t3", shell=True, cwd=&#39;/tmp/&#39;,)
>>> import subprocess
>>> obj = subprocess.Popen(["python"], stdin=subprocess.PIPE, stdout=subprocess.PIPE, stderr=subprocess.PIPE, universal_newlines=True)
>>> obj.stdin.write("print(1)\n")
9
>>> obj.stdin.write("print(2)")
8
>>> obj.stdin.close()
>>> cmd_out = obj.stdout.read()
>>> obj.stdout.close()
>>> cmd_error = obj.stderr.read()
>>> obj.stderr.close()
>>> print(cmd_out)
1
2
>>> print(cmd_error)

>>> import subprocess
>>> 
>>> obj = subprocess.Popen(["python"], stdin=subprocess.PIPE, stdout=subprocess.PIPE, stderr=subprocess.PIPE, universal_newlines=True)
>>> obj.stdin.write("print(1)\n")
9
>>> obj.stdin.write("print(2)")
8
>>> 
>>> out_error_list = obj.communicate()
>>> print(out_error_list)
(&#39;1\n2\n&#39;, &#39;&#39;)

>>> obj = subprocess.Popen(["python"], stdin=subprocess.PIPE, stdout=subprocess.PIPE, stderr=subprocess.PIPE, universal_newlines=True)
>>> out_error_list = obj.communicate(&#39;print("hello")&#39;)
>>> print(out_error_list)
(&#39;hello\n&#39;, &#39;&#39;)

:

Pythonを使用してシェルスクリプトを実行し、パラメータを動的に転送する そしてサブプロセスの基本的な使い方

サブプロセスモジュールの紹介と使い方

Python標準ライブラリのサブプロセスパッケージの詳細な紹介

以上がサブプロセスはPythonでLinuxコマンドをバッチで実行しますの詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。