الهروب من وسيطات الأوامر في os.system() يستدعي
عند العمل مع os.system() في بايثون، ضمان التعامل الصحيح مع الوسيطات مهم. غالبًا ما تتطلب الملفات والمعلمات الأخرى الهروب لمنع التداخل مع أوامر الصدفة. فيما يلي دليل شامل للتخلص بشكل فعال من الوسائط الخاصة بأنظمة التشغيل والأصداف المختلفة، وخاصة bash:
استخدام علامات الاقتباس
الحل الأبسط هو وضع الوسائط بين علامتي اقتباس. تمنع علامات الاقتباس المفردة (') توسيع الصدفة، بينما تسمح علامات الاقتباس المزدوجة (") باستبدال المتغير ولكنها تمنع التوسع المتغير داخل السلسلة المقتبسة. يتم دعم هذا الأسلوب على نطاق واسع عبر الأنظمة الأساسية والأصداف المختلفة، بما في ذلك bash:
os.system("cat '%s' | grep something | sort > '%s'"
% (in_filename, out_filename))
استخدام وحدة shlex
توفر بايثون وحدة shlex المصممة خصيصًا لهذا الغرض. تعمل وظيفة الاقتباس () الخاصة بها على الهروب بشكل صحيح من السلاسل المستخدمة في أصداف POSIX، بما في ذلك bash:
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))
استخدام وحدة الأنابيب (تحذير من الإهمال!)
بالنسبة لإصدارات Python 2.x و3.x حتى 3.10، Pipes.quote من يمكن استخدام وحدة الأنابيب المهملة كبديل لـ shlex.quote. انتبه إلى أنه بدءًا من Python 3.11، تم وضع علامة على الأنابيب للإزالة:
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))
كقاعدة عامة، لأسباب أمنية، لا ينبغي توصيل المدخلات التي ينشئها المستخدم مباشرة باستدعاءات النظام دون التحقق من الصحة والتطهير المناسب.
تنصل: جميع الموارد المقدمة هي جزئيًا من الإنترنت. إذا كان هناك أي انتهاك لحقوق الطبع والنشر الخاصة بك أو الحقوق والمصالح الأخرى، فيرجى توضيح الأسباب التفصيلية وتقديم دليل على حقوق الطبع والنشر أو الحقوق والمصالح ثم إرسالها إلى البريد الإلكتروني: [email protected]. سوف نتعامل مع الأمر لك في أقرب وقت ممكن.
Copyright© 2022 湘ICP备2022001581号-3