GNU/Linux >> Linux の 問題 >  >> Linux

パイプで「サブプロセス」コマンドを使用する方法

サブプロセスを使用したパイプラインの設定に関するドキュメントを参照してください:http://docs.python.org/2/library/subprocess.html#replacing-shell-pipeline

次のコード例はまだテストしていませんが、おおむね希望どおりであるはずです:

query = "process_name"
ps_process = Popen(["ps", "-A"], stdout=PIPE)
grep_process = Popen(["grep", query], stdin=ps_process.stdout, stdout=PIPE)
ps_process.stdout.close()  # Allow ps_process to receive a SIGPIPE if grep_process exits.
output = grep_process.communicate()[0]

または、サブプロセス オブジェクトで常に communicate メソッドを使用できます。

cmd = "ps -A|grep 'process_name'"
ps = subprocess.Popen(cmd,shell=True,stdout=subprocess.PIPE,stderr=subprocess.STDOUT)
output = ps.communicate()[0]
print(output)

通信メソッドは、標準出力と標準エラーのタプルを返します。


subprocess でパイプを使用するには モジュール、 shell=True を渡す必要があります .

ただし、さまざまな理由から、これはあまりお勧めできません。その理由の 1 つはセキュリティです。代わりに、ps を作成します と grep プロセスを個別に処理し、次のように出力を一方から他方にパイプします:

ps = subprocess.Popen(('ps', '-A'), stdout=subprocess.PIPE)
output = subprocess.check_output(('grep', 'process_name'), stdin=ps.stdout)
ps.wait()

ただし、特定のケースでは、簡単な解決策は subprocess.check_output(('ps', '-A')) を呼び出すことです そして str.find


subprocess.run の使用

import subprocess
    
ps = subprocess.run(['ps', '-A'], check=True, capture_output=True)
processNames = subprocess.run(['grep', 'process_name'],
                              input=ps.stdout, capture_output=True)
print(processNames.stdout)

Linux
  1. Linuxでパイプと名前付きパイプを使用する方法(例付き)

  2. LinuxでのSCPコマンド:使用方法と例

  3. findコマンドで正規表現を使用するには?

  1. 例でethtoolコマンドを使用する方法

  2. 実用的な例でLinuxHexdumpコマンドを使用する方法

  3. LinuxでSuコマンドを使用する方法

  1. 例を使用してLinuxでIPコマンドを使用する方法

  2. Linux Catコマンドの使用方法(例付き)

  3. 例を使用してLinuxでRmmodコマンドを使用する方法