Rumah > pembangunan bahagian belakang > Tutorial Python > Bagaimana untuk Menghantar Input Rentetan dengan Betul ke stdin `subprocess.Popen`?

Bagaimana untuk Menghantar Input Rentetan dengan Betul ke stdin `subprocess.Popen`?

Mary-Kate Olsen
Lepaskan: 2024-12-19 06:04:51
asal
664 orang telah melayarinya

How to Correctly Pass String Input to `subprocess.Popen`'s stdin?

Melalukan Input Rentetan ke Subproses.Popen melalui Stdin

Masalah:

Melalukan rentetan ke dalam hujah stdin subprocess.Popen menggunakan objek cStringIO.StringIO menghasilkan an ralat, kerana objek tidak mempunyai atribut fileno yang diperlukan.

Penyelesaian:

Untuk menyelesaikan isu ini, adalah disyorkan untuk menggunakan pendekatan yang lebih mudah yang digariskan dalam Popen. berkomunikasi() dokumentasi. Dengan menetapkan stdin=PIPE, anda boleh mencipta paip untuk stdin dan memberikan input rentetan terus kepada kaedah komunikasi.

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

# Output:
# -> four
# -> five
# ->
Salin selepas log masuk

Nota Tambahan:

Untuk Python 3.5 (3.6 untuk pengekodan), subprocess.run memudahkan proses dengan membenarkan anda menghantar input rentetan dan mendapatkan semula output sebagai rentetan dalam satu panggil.

from subprocess import run, PIPE

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

# Output:
# -> 0
print(p.stdout)

# Output:
# -> four
# -> five
# -> 
Salin selepas log masuk

Atas ialah kandungan terperinci Bagaimana untuk Menghantar Input Rentetan dengan Betul ke stdin `subprocess.Popen`?. 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