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
Mary-Kate Olsenasal
2024-12-19 06:04:51591semak imbas

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

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

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