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
Susan Sarandonasal
2024-12-06 13:04:12582semak imbas

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())

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)

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!

Kenyataan:
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