Rumah >pembangunan bahagian belakang >Tutorial Python >Bagaimana untuk Melarikan Diri dari Argumen Perintah dengan Benar dalam Panggilan `os.system()` Python?

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

Mary-Kate Olsen
Mary-Kate Olsenasal
2024-10-29 05:48:02926semak imbas

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>

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

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

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