আমি কীভাবে ফাইলের নামগুলি ফাঁকা জায়গায় আর্গুমেন্ট হিসাবে পাস করতে পারি?


11

আমার কাছে পাইথন স্ক্রিপ্ট রয়েছে যা স্ট্রিং আর্গুমেন্ট গ্রহণ করে।

$ python script.py "one image.jpg" "another image.jpg"

এটি প্রত্যাশার মতো কাজ করে।

পাইথন আরগপারস: ["one image.jpg", "another image.jpg"]


আমার যদি ফাইল নামগুলি পাস করার দরকার হয় তবে আমি করব,

$ python script.py $(ls "/some/dir/*.jpg")

পাইথন আরগপারস: ["one", "image.jpg", "another", "image.jpg"]

তাহলে ব্যবহার -Qএর lsকমান্ড, আমি উদ্ধৃতি চিহ্ন মধ্যে ফলাফল মোড়ানো পারবেন না। যাইহোক, উদ্ধৃতিগুলি পাইথন স্ক্রিপ্টে পালিয়ে যায়, অর্থাত্।

$ python script.py $(ls -Q "/some/dir/*.jpg")

পাইথন আরগপারস: ['"one image.jpg"', '"another image.jpg"']


আমি কীভাবে lsফাইলের নামগুলি যুক্তি হিসাবে ব্যবহার করতে যথাযথ স্ট্রিংয়ে প্রসারিত করব ? (আমার প্রথম উদাহরণ হিসাবে)


আপনি শেল সম্প্রসারণ উদ্ধৃত করা উচিত: "$(ls -Q '/some/dir/*.jpg')"। তবে উত্তর দ্বারা বর্ণিত আরও ভাল বিকল্প আছে।
বাকুরিউ

উত্তর:


23

পার্স না ls। শুধু ব্যবহার করুন:

python script.py /path/to/*.jpg

এটি শেল গ্লোব্বিং সম্পাদন /path/to/*.jpgকরে যা যথাযথ তালিকার দ্বারা প্রতিস্থাপিত হয়।


5

আমি মনে করি উপরে উল্লিখিত glob উত্তর সবচেয়ে ভালো, কিন্তু xargsfindএকটি সমাধান যে কখনও কখনও ব্যবহার করা যেতে পারে।

find /some/dir/ -name '*.jpg' -print0 | xargs -0 python script.py

এটি কাজ করে কারণ -print0অন findফাঁকা স্থানের চেয়ে নাল বাইটের সাহায্যে আউটপুট পৃথক করবে এবং -0xargs কমান্ড লাইনে ইনপুটটি নাল বাইট দ্বারা পৃথক করা হবে বলে ধরে নেওয়া হবে।

আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.