Bagaimana untuk Melarikan Diri dari Argumen Perintah dengan Benar dalam Panggilan `os.system()` Python?

Mary-Kate Olsen
Lepaskan: 2024-10-29 05:48:02
asal
869 orang telah melayarinya

How to Properly Escape Command Arguments in Python's `os.system()` Calls?

Melepaskan Argumen Perintah dalam Panggilan os.system()

Apabila bekerja dengan os.system() dalam Python, memastikan pengendalian hujah yang betul adalah penting. Fail dan parameter lain selalunya memerlukan melarikan diri untuk mengelakkan gangguan dengan arahan shell. Berikut ialah panduan komprehensif untuk melepaskan hujah dengan berkesan untuk pelbagai sistem pengendalian dan cengkerang, terutamanya bash:

Menggunakan Petikan

Penyelesaian paling mudah ialah menyertakan hujah dalam petikan. Petikan tunggal (') menghalang pengembangan cangkerang, manakala petikan berganda (") membenarkan penggantian pembolehubah tetapi menyekat pengembangan pembolehubah dalam rentetan yang disebut. Pendekatan ini disokong secara meluas merentas platform dan cangkerang yang berbeza, termasuk bash:

<code class="python">os.system("cat '%s' | grep something | sort > '%s'" 
          % (in_filename, out_filename))</code>
Salin selepas log masuk

Menggunakan Modul shlex

Python menyediakan modul shlex yang direka khusus untuk tujuan ini Fungsi petikan()nya melepaskan rentetan untuk digunakan dalam cangkerang POSIX, termasuk bash:

<code class="python">import shlex

escaped_in_filename = shlex.quote(in_filename)
escaped_out_filename = shlex.quote(out_filename)
os.system("cat {} | grep something | sort > {}".format(
          escaped_in_filename, escaped_out_filename))</code>
Salin selepas log masuk
<.>

Menggunakan Modul paip (Amaran Penamatan!)

Untuk versi Python 2.x dan 3.x sehingga 3.10, pipes.quote daripada modul paip yang tidak digunakan boleh digunakan sebagai alternatif kepada shlex.quote. Harap maklum bahawa bermula dari Python 3.11, paip ditandakan untuk dialih keluar:

<code class="python">from pipes import quote

escaped_in_filename = quote(in_filename)
escaped_out_filename = quote(out_filename)
os.system("cat {} | grep something | sort > {}".format(
          escaped_in_filename, escaped_out_filename))</code>
Salin selepas log masuk
Sebagai peraturan umum, atas sebab keselamatan, input yang dijana pengguna tidak boleh dipalamkan terus ke dalam panggilan sistem tanpa pengesahan dan sanitasi yang betul.

Atas ialah kandungan terperinci Bagaimana untuk Melarikan Diri dari Argumen Perintah dengan Benar dalam Panggilan `os.system()` Python?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

sumber:php.cn
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