Rumah >pembangunan bahagian belakang >Tutorial Python >Bagaimana untuk Menghantar Input Rentetan dengan Betul ke stdin `subprocess.Popen`?
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!