Rumah > pembangunan bahagian belakang > Tutorial Python > Bagaimana Saya Boleh Menyalurkan String ke subprocess.Popen's stdin?

Bagaimana Saya Boleh Menyalurkan String ke subprocess.Popen's stdin?

Susan Sarandon
Lepaskan: 2024-12-08 18:31:10
asal
519 orang telah melayarinya

How Can I Pipe a String to subprocess.Popen's stdin?

Cara Menyalurkan String ke dalam subproses.Popen melalui Argumen Stdin

Fungsi subproses.Popen membolehkan skrip Python menghasilkan proses baharu dan berinteraksi dengan input, output dan ralat standard mereka. Satu kes penggunaan biasa melibatkan penghantaran data kepada proses anak melalui stdinnya, yang boleh dicapai dengan menentukan stdin=PIPE semasa penciptaan objek.

Walau bagaimanapun, percubaan untuk menggunakan objek cStringIO.StringIO sebagai strim stdin menghasilkan ralat, kerana ia tidak mempunyai atribut fileno yang dijangkakan oleh subprocess.Popen. Untuk menyelesaikan isu ini, gunakan teknik berikut:

Menggunakan Popen.communicate()

Seperti dokumentasi rasmi, Popen.communicate() menjangkakan data akan dihantar melalui parameter input, bukannya aliran stdin. Ubah suai kod anda kepada:

1

2

3

4

5

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

Menggunakan subprocess.run (Python 3.5 )

Untuk Python versi 3.5 dan ke atas, subprocess.run menyediakan cara yang mudah untuk mengurus subproses. Ia membolehkan anda menghantar input rentetan dan mendapatkan output rentetan dalam satu panggilan fungsi:

1

2

3

4

5

6

7

#!/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

Dengan menggunakan pendekatan ini, anda boleh menghantar rentetan ke dalam subproses dengan berkesan. Buka melalui hujah stdin, membolehkan program anda untuk berinteraksi dengan lancar dengan proses luaran.

Atas ialah kandungan terperinci Bagaimana Saya Boleh Menyalurkan String ke subprocess.Popen's stdin?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

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