Lihat dokumentasi tentang menyiapkan jalur pipa menggunakan subproses:http://docs.python.org/2/library/subprocess.html#replacing-Shell-pipeline
Saya belum menguji contoh kode berikut tetapi kira-kira seperti yang Anda inginkan:
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]
Atau Anda selalu dapat menggunakan metode komunikasi pada objek subproses.
cmd = "ps -A|grep 'process_name'"
ps = subprocess.Popen(cmd,shell=True,stdout=subprocess.PIPE,stderr=subprocess.STDOUT)
output = ps.communicate()[0]
print(output)
Metode komunikasi mengembalikan tuple keluaran standar dan kesalahan standar.
Untuk menggunakan pipa dengan subprocess
modul, Anda harus melewati shell=True
.
Namun, ini sebenarnya tidak disarankan karena berbagai alasan, yang paling tidak adalah keamanan. Sebagai gantinya, buat ps
dan grep
memproses secara terpisah, dan menyalurkan output dari satu ke yang lain, seperti:
ps = subprocess.Popen(('ps', '-A'), stdout=subprocess.PIPE)
output = subprocess.check_output(('grep', 'process_name'), stdin=ps.stdout)
ps.wait()
Namun, dalam kasus khusus Anda, solusi sederhananya adalah dengan memanggil subprocess.check_output(('ps', '-A'))
lalu str.find
pada keluaran.
Menggunakan 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)