ওএস.সিস্টেম () ব্যবহার করার সময় প্রায়শই ফাইলের নাম এবং অন্যান্য আর্গুমেন্টগুলি কমান্ডের প্যারামিটার হিসাবে পাস করা থেকে বাঁচতে হয়। কিভাবে আমি এটি করতে পারব? সাধারণত এমন কিছু যা একাধিক অপারেটিং সিস্টেম / শেলগুলিতে কাজ করবে তবে বিশেষত ব্যাশের জন্য।
আমি বর্তমানে নিম্নলিখিতগুলি করছি, তবে আমি নিশ্চিত যে এর জন্য অবশ্যই একটি লাইব্রেরি ফাংশন থাকতে হবে বা কমপক্ষে আরও মার্জিত / শক্তিশালী / দক্ষ বিকল্প থাকতে হবে:
def sh_escape(s):
return s.replace("(","\\(").replace(")","\\)").replace(" ","\\ ")
os.system("cat %s | grep something | sort > %s"
% (sh_escape(in_filename),
sh_escape(out_filename)))
সম্পাদনা: আমি উদ্ধৃতি ব্যবহারের সহজ উত্তরটি গ্রহণ করেছি, জানি না কেন আমি এটি ভেবে দেখিনি; আমি অনুমান করি কারণ আমি উইন্ডোজ থেকে এসেছি যেখানে 'এবং "কিছুটা আলাদা আচরণ করে।
সুরক্ষা সম্পর্কে, আমি উদ্বেগটি বুঝতে পারি, তবে, এই ক্ষেত্রে আমি ওএস.সিস্টেম () সরবরাহ করে এমন একটি দ্রুত এবং সহজ সমাধানে আগ্রহী এবং স্ট্রিংগুলির উত্স হয় ব্যবহারকারী দ্বারা উত্পাদিত হয় না বা কমপক্ষে একটি দ্বারা প্রবেশ করা হয় না বিশ্বস্ত ব্যবহারকারী (আমি)
sh_escape
ফাংশন ;
স্থান এবং স্থানগুলি থেকে বেরিয়ে আসবে এবং সুরক্ষার সমস্যাটিকে সাদামাটা কিছু জাতীয় ফাইল তৈরি করে সরিয়ে ফেলবে foo.txt\;\ rm\ -rf\ /
।