Subproses.menjalankan Metode
Subproses.metode run mengambil daftar argumen. Ketika metode dipanggil, ia menjalankan perintah dan menunggu proses selesai, mengembalikan objek "CompletedProcess" pada akhirnya. Objek "CompletedProcess" mengembalikan stdout, stderr, argumen asli yang digunakan saat memanggil metode, dan kode pengembalian. Stdout mengacu pada aliran data yang dihasilkan oleh perintah, sedangkan stderr mengacu pada kesalahan apa pun yang muncul selama eksekusi program. Setiap kode pengembalian bukan nol (kode keluar) akan berarti kesalahan dengan perintah yang dijalankan di subproses.menjalankan metode.
Contoh 1: Isi Output File Teks Menggunakan Subproses.menjalankan Metode
Perintah di bawah ini akan menampilkan isi dari "data".txt”, dengan asumsi bahwa itu berisi string “name=John”.
subproses imporsubproses.jalankan(["kucing", "data.txt"])
Menjalankan kode di atas akan mengembalikan output berikut:
nama=JohnCompletedProcess(args=['cat', 'data.txt'], kode kembali=0)
Elemen pertama dari argumen daftar adalah nama perintah yang akan dieksekusi. Setiap elemen dalam daftar yang mengikuti elemen pertama dianggap sebagai opsi atau sakelar baris perintah. Anda dapat menggunakan tanda hubung tunggal dan tanda hubung ganda, juga, untuk menentukan opsi. Misalnya, untuk membuat daftar file dan folder dalam direktori, kodenya adalah "subproses".jalankan([“ls”, “-l”]”. Dalam sebagian besar kasus ini, Anda dapat mempertimbangkan argumen apa pun yang dipisahkan spasi dalam perintah shell sebagai elemen individual dalam daftar yang disediakan untuk subproses.menjalankan metode.
Contoh 2: Menekan Output dari Subproses.menjalankan Metode
Untuk menekan output dari subproses.menjalankan metode, Anda harus menyediakan “stdout=subprocess.DEVNULL” dan “stderr=subproses.DEVNULL” sebagai argumen tambahan.
subproses imporsubproses.jalankan(["kucing", "data.txt"], stdout=subproses.DEVNULL,
stderr=subproses.DEVNULL)
Menjalankan kode di atas akan menghasilkan output berikut:
CompletedProcess(args=['cat', 'data.txt'], kode kembali=0)Contoh 3: Menangkap Output dari Subproses.menjalankan Metode
Untuk menangkap output dari subproses.jalankan metode, gunakan argumen tambahan bernama “capture_output=True”.
subproses imporkeluaran = subproses.jalankan(["kucing", "data.txt"], capture_output=Benar)
cetak (keluaran)
Menjalankan kode di atas akan menghasilkan output berikut:
CompletedProcess(args=['cat', 'data.txt'], kode kembali=0,stdout=b'nama=John\n', stderr=b")
Anda dapat mengakses nilai stdout dan stderr secara individual dengan menggunakan “output.stdout” dan “keluaran.metode stderr”. Output dihasilkan sebagai urutan byte. Untuk mendapatkan string sebagai output, gunakan “output.stdout.decode("utf-8")" metode. Anda juga dapat memberikan “text=True” sebagai argumen tambahan untuk subproses.jalankan panggilan untuk mendapatkan output dalam format string. Untuk mendapatkan kode status keluar, Anda dapat menggunakan "output".metode kode kembali.
Contoh 4: Naikkan Pengecualian pada Kegagalan Perintah yang Dieksekusi oleh Subproses.menjalankan Metode
Untuk memunculkan pengecualian saat perintah keluar dengan status bukan nol, gunakan argumen “check=True”.
subproses imporsubproses.jalankan(["kucing", "data.tx"], capture_output=Benar, teks=Benar, centang=Benar)
Menjalankan kode di atas akan menghasilkan output berikut:
tingkatkan CalledProcessError (kode ulang, proses.argumen,subproses.DisebutProcessError: Perintah '['cat', 'data.tx']'
mengembalikan status keluar bukan nol 1.
Contoh 5: Lewati String ke Perintah yang Dieksekusi oleh Subproses.menjalankan Metode
Anda dapat meneruskan string ke perintah yang akan dieksekusi oleh subproses.jalankan metode dengan menggunakan argumen "input='string'".
subproses imporkeluaran = subproses.jalankan(["kucing"], masukan="data.txt", capture_output=Benar,
teks=Benar, centang=Benar)
cetak (keluaran)
Menjalankan kode di atas akan menghasilkan output berikut:
CompletedProcess(args=['cat'], returncode=0, stdout="data.txt", stderr=")Seperti yang Anda lihat, kode di atas melewati "data".txt” sebagai string dan bukan sebagai objek file. Untuk melewatkan “data.txt" sebagai file, gunakan argumen "stdin".
dengan buka("data.txt") sebagai f:keluaran = subproses.run(["cat"], stdin=f, capture_output=Benar,
teks=Benar, centang=Benar)
cetak (keluaran)
Menjalankan kode di atas akan menghasilkan output berikut:
CompletedProcess(args=['cat'], returncode=0, stdout="name=John\n", stderr=")Contoh 6: Jalankan Perintah Langsung di Shell Menggunakan Subproses.menjalankan Metode
Dimungkinkan untuk menjalankan perintah langsung ke shell "sebagaimana adanya", alih-alih menggunakan pemisahan string di perintah utama dan opsi yang mengikutinya. Untuk melakukan ini, Anda harus memberikan "shell=True" sebagai argumen tambahan. Namun ini, tidak disarankan oleh pengembang python karena menggunakan "shell=True" dapat menyebabkan masalah keamanan. Anda dapat membaca lebih lanjut tentang implikasi keamanan dari sini.
subproses imporsubproses.run("data kucing'.txt'", shell=Benar)
Menjalankan kode di atas akan menghasilkan output berikut:
nama=JohnKesimpulan
Subproses.menjalankan metode di Python cukup kuat, karena memungkinkan Anda untuk menjalankan perintah shell di dalam python itu sendiri. Ini membantu dalam membatasi semua kode ke python itu sendiri tanpa perlu memiliki kode skrip shell tambahan di file terpisah. Akan tetapi, cukup sulit untuk menandai perintah shell dengan benar dalam daftar python. Anda dapat menggunakan "shlex".split()” metode untuk menandai perintah shell sederhana, tetapi dalam perintah yang panjang dan kompleks - terutama yang memiliki simbol pipa - shlex gagal membagi perintah dengan benar. Dalam kasus seperti itu, debugging bisa menjadi masalah yang rumit. Anda dapat menggunakan argumen “shell=True” untuk menghindari hal ini, tetapi ada beberapa masalah keamanan yang terkait dengan tindakan ini this.