Rumah > pembangunan bahagian belakang > Tutorial Python > Bagaimana untuk Melewati String sebagai stdin kepada subprocess.Popen?

Bagaimana untuk Melewati String sebagai stdin kepada subprocess.Popen?

Susan Sarandon
Lepaskan: 2024-12-06 13:04:12
asal
588 orang telah melayarinya

How to Pass a String as stdin to subprocess.Popen?

Melalukan Input Rentetan kepada subproses.Popen

Ralat yang dihadapi semasa cuba menghantar objek StringIO sebagai stdin kepada subproses.Popen mendedahkan StringIO itu objek tidak diiktiraf sebagai objek seperti fail yang sah oleh subproses. Untuk menyelesaikan isu ini dan berjaya menghantar rentetan sebagai stdin, anda perlu membuat saluran paip ke proses Popen dahulu.

Menggunakan Penciptaan Saluran Paip Eksplisit

Subproses. communication() dokumentasi mencadangkan mewujudkan saluran paip dengan stdin=PIPE untuk menghantar data ke stdin proses. Ini boleh dicapai dengan mengubah suai kod seperti berikut:

import subprocess
from subprocess import Popen, PIPE, STDOUT

p = Popen(['grep', 'f'], stdout=PIPE, stdin=PIPE, stderr=STDOUT)
grep_stdout = p.communicate(input=b'one\ntwo\nthree\nfour\nfive\nsix\n')[0]
print(grep_stdout.decode())
Salin selepas log masuk

Kod ini mencipta paip ke proses grep, membenarkan rentetan input dihantar melalui argumen stdin.

Menggunakan subprocess.run (Python 3.5 )

Untuk Python versi 3.5 dan lebih tinggi, subprocess.run boleh digunakan untuk menghantar input sebagai rentetan dan mendapatkan semula output sebagai rentetan dalam satu panggilan:

#!/usr/bin/env python3
from subprocess import run, PIPE

p = run(['grep', 'f'], stdout=PIPE,
        input='one\ntwo\nthree\nfour\nfive\nsix\n', encoding='ascii')
print(p.returncode)
print(p.stdout)
Salin selepas log masuk

Pendekatan ini menyediakan alternatif ringkas kepada kaedah penciptaan saluran paip yang jelas.

Atas ialah kandungan terperinci Bagaimana untuk Melewati String sebagai stdin kepada subprocess.Popen?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

sumber:php.cn
Kenyataan Laman Web ini
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn
Artikel terbaru oleh pengarang
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan