Python

Cara Menjalankan Perintah Shell dengan Python Menggunakan Metode Jalankan Subproses Run

Cara Menjalankan Perintah Shell dengan Python Menggunakan Metode Jalankan Subproses Run
Subproses adalah modul Python bawaan yang dapat digunakan untuk membuat proses baru dan berinteraksi dengan aliran data input dan outputnya output. Dalam istilah yang lebih sederhana, Anda dapat menggunakannya untuk menjalankan perintah shell dan menjalankan binari yang dapat dieksekusi yang biasanya tersebar di berbagai folder "bin" di sistem file Linux. Anda juga dapat menyediakan path lengkap ke biner yang dapat dieksekusi dan menggunakan sakelar baris perintah apa pun yang terkait dengan biner. Artikel ini akan menjelaskan cara menggunakan modul subproses dan metode menjalankannya di aplikasi Python. Semua contoh kode dalam artikel diuji dengan Python 3.8.2 di Ubuntu 20.04.

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 impor
subproses.jalankan(["kucing", "data.txt"])

Menjalankan kode di atas akan mengembalikan output berikut:

nama=John
CompletedProcess(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 impor
subproses.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 impor
keluaran = 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 impor
subproses.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 impor
keluaran = 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 impor
subproses.run("data kucing'.txt'", shell=Benar)

Menjalankan kode di atas akan menghasilkan output berikut:

nama=John

Kesimpulan

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.

Emulator Konsol Game Terbaik untuk Linux
Artikel ini akan mencantumkan perangkat lunak emulasi konsol game populer yang tersedia untuk Linux. Emulasi adalah lapisan kompatibilitas perangkat l...
Distro Linux Terbaik untuk Gaming pada tahun 2021
Sistem operasi Linux telah berkembang jauh dari tampilan aslinya, sederhana, berbasis server. OS ini telah sangat meningkat dalam beberapa tahun terak...
Cara merekam dan streaming sesi permainan Anda di Linux
Dulu, bermain game hanya dianggap sebagai hobi, namun seiring berjalannya waktu, industri game mengalami pertumbuhan yang sangat pesat baik dari segi ...