মূল প্রশ্নটি: আপনি কি আপনার কনফিগারেশন ফাইলটি কিছু টিউরিং সম্পূর্ণ ভাষায় থাকতে চান (পাইথনের মতো)? আপনি যে চাও, তাহলে আপনি কিছু এম্বেডিং বিবেচনা করতে পারেন অন্যান্য (টুরিং সম্পূর্ণ) স্ক্রিপ্টিং মত ভাষা Guile এর বা অ্যাপ্লিকেশন Lua ওপর অধ্যায়টি পড়া; কারণ সেখানে "সহজ" ব্যবহার করা অথবা এম্বেড করার চেয়ে পাইথন হিসাবে অনুভূত হতে পারে ( প্রসারিত হচ্ছে & এম্বেডিং পাইথন )। আমি যে আরও আলোচনা হবে (কারণ অন্যান্য উত্তর -eg আমোন দ্বারা - গভীরতা যে আলোচনা) কিন্তু যে লক্ষ্য আপনার অ্যাপ্লিকেশনে একটি স্ক্রিপ্টিং ভাষা এম্বেডিং একটি হল প্রধান স্থাপত্য পছন্দ , আপনি খুব বিবেচনা করা উচিত গোড়ার দিকে; আমি সত্যিই পরে সেই পছন্দটি করার পরামর্শ দিচ্ছি না!
"স্ক্রিপ্টস" এর মাধ্যমে কনফিগারযোগ্য প্রোগ্রামের একটি সুপরিচিত উদাহরণ হ'ল জিএনইউ ইম্যাকস সম্পাদক (বা সম্ভবত মালিকানাধীন অঞ্চলে অটোক্যাড ); সুতরাং সচেতন হন যে আপনি যদি স্ক্রিপ্টিং গ্রহণ করেন তবে কিছু ব্যবহারকারী অবশেষে ব্যবহার করবেন - এবং আপনার দৃষ্টিকোণে সম্ভবত অপব্যবহার করা হবে - সেই সুবিধাটি ব্যাপকভাবে এবং বহু-হাজার লাইনের স্ক্রিপ্ট তৈরি করবেন; সুতরাং একটি ভাল যথেষ্ট স্ক্রিপ্টিং ভাষার পছন্দ গুরুত্বপূর্ণ।
তবে (অন্তত POSIX সিস্টেমে), আপনি সুবিধাজনক সক্রিয় করতে বিবেচনা করতে পারেন কনফিগারেশন "ফাইল" পরিবর্তনশীল করা নির্ণিত আরম্ভের সময়ে (অবশ্যই, আপনার সিস্টেম অ্যাডমিন অথবা ব্যবহারকারীর জন্য একটি বিবেকী কনফিগারেশন বোঝা রেখে; আসলে একটি কনফিগারেশন হয় পাঠ্য যা কোনও ফাইল বা কিছু আদেশ থেকে আসে)। তার জন্য, আপনি কেবল কনভেনশনটি গ্রহণ করতে পারেন (এবং এটি ডকুমেন্ট করে) যে একটি কনফিগারেশন ফাইল পাথ যেমন একটি !
বা একটি দিয়ে শুরু হওয়া |
শেল কমান্ড যা আপনি পাইপলাইন হিসাবে পড়তেন । এটি আপনার ব্যবহারকারীর সাথে সবচেয়ে বেশি পরিচিত "প্রিপ্রসেসর" বা "স্ক্রিপ্টিং ভাষা" ব্যবহারের পছন্দকে ছেড়ে দেয়।
(আপনি যদি গতিশীলভাবে গণনা করা কনফিগারেশন গ্রহণ করেন তবে আপনাকে সুরক্ষার সমস্যাগুলি সম্পর্কে আপনার ব্যবহারকারীর উপর আস্থা রাখতে হবে)
সুতরাং আপনার প্রারম্ভিককরণের কোডটিতে আপনার main
(উদাহরণস্বরূপ) কিছু --config
যুক্তি স্বীকার করা হবে confarg
এবং এ FILE*configf;
থেকে কিছু পাবেন । যদি সেই যুক্তিটি !
(যেমন যদি (confarg[0]=='!')
....) দিয়ে শুরু হয় , আপনি configf = popen(confarg+1, "r");
সেই পাইপটি ব্যবহার এবং বন্ধ করে দিতেন pclose(configf);
। অন্যথায় আপনি configf=fopen(confarg, "r");
সেই ফাইলটি ব্যবহার এবং বন্ধ করে দিতেন fclose(configf);
(ত্রুটি পরীক্ষা করার বিষয়টি ভুলে যাবেন না)। দেখুন নল (7) , popen (3) , হয় fopen (3) । পাইথনে কোডেড একটি অ্যাপ্লিকেশনটির জন্য ওএসপেন ইত্যাদি পড়ুন ...
(দস্তাবেজে নামে একজন কনফিগারেশন ফাইল পাস অনুপস্থিত অদ্ভুত ব্যবহারকারীর জন্য !foo.config
পাস ./!foo.config
বাইপাস করার popen
উপরে কৌতুক)
বিটিডাব্লু, এই জাতীয় কৌশলটি কেবল একটি সুবিধা (উন্নত ব্যবহারকারীকে উদাহরণ হিসাবে একটি কনফিগারেশন ফাইল উত্পন্ন করার জন্য কিছু শেল স্ক্রিপ্ট কোড করা প্রয়োজন )। যদি ব্যবহারকারী কোনও বাগ রিপোর্ট করতে চান তবে তার উচিত আপনার উত্পন্ন কনফিগারেশন ফাইলটি ...
লক্ষ্য করুন যে আপনি আরম্ভের সময় প্লাগইনগুলি ব্যবহার করার ক্ষমতা এবং লোড করার সক্ষমতা দিয়ে উদাহরণস্বরূপ dlopen (3) সহ (এবং আপনাকে সেই প্লাগইন সম্পর্কে আপনার ব্যবহারকারীর উপর বিশ্বাস রাখতে হবে) নকশা করতে পারেন। আবার এটি একটি অত্যন্ত গুরুত্বপূর্ণ আর্কিটেকচারাল সিদ্ধান্ত (এবং আপনাকে এই প্লাগইনগুলি এবং আপনার অ্যাপ্লিকেশন সম্পর্কে কিছু স্থিতিশীল এপিআই এবং কনভেনশন সংজ্ঞায়িত করতে এবং সরবরাহ করতে হবে )।
পাইথনের মতো স্ক্রিপ্টিং ভাষায় কোডেড একটি অ্যাপ্লিকেশনের জন্য আপনি কিছু প্রোগ্রাম আর্গুমেন্টও গ্রহণ করতে পারেন eval বা exec বা অনুরূপ আদিমতার জন্য pr আবার, সুরক্ষার সমস্যাগুলি তখন (উন্নত) ব্যবহারকারীর উদ্বেগ ।
আপনার কনফিগারেশন ফাইলটির পাঠ্য বিন্যাস (এটি উত্পন্ন বা না হওয়া) সম্পর্কে, আমি বিশ্বাস করি যে আপনার বেশিরভাগই এটি ভালভাবে নথিভুক্ত করা প্রয়োজন (এবং কোনও নির্দিষ্ট বিন্যাসের পছন্দটি তেমন গুরুত্বপূর্ণ নয়; তবে আমি আপনাকে আপনার ব্যবহারকারীকে রাখতে সক্ষম হতে পরামর্শ দিচ্ছি) কিছু-বাদ দেওয়া- এর ভিতরে মন্তব্যগুলি)। আপনি JSON ব্যবহার করতে পারে (বিশেষ কিছু JSON বিশ্লেষক গ্রহণ এবং চলিত সঙ্গে মন্তব্য কুঁদন সঙ্গে //
eol বা পর্যন্ত /*
... */
...), অথবা YAML, অথবা XML, অথবা INI এ বা আপনার নিজের জিনিস। একটি কনফিগারেশন ফাইল পার্স করা যুক্তিসঙ্গতভাবে সহজ (এবং আপনি সেই কাজের সাথে সম্পর্কিত অনেকগুলি লাইব্রেরি পাবেন)।