আমি একটি টুলভালিডেটর ক্লাস কাস্টমাইজ করার বিষয়ে গত সপ্তাহে একটি প্রশ্ন পোস্ট করেছি এবং খুব ভাল উত্তর পেয়েছি। প্রস্তাবিত সমাধানগুলির সাথে কাজ করার জন্য, আমি একটি কাস্টম মডিউল তৈরি করেছি যা ডিবিতে অনুসন্ধানগুলি সম্পাদন করে, এবং টুলভালিডেটর শ্রেণি (ড্রপ-ডাউন তালিকার জন্য মান সরবরাহ করতে) এবং পরে জিওপ্রসেসিং স্ক্রিপ্টে (অন্যটি পেতে ড্রপ-ডাউন তালিকায় নির্বাচিত আইটেমগুলির উপর ভিত্তি করে পরামিতি)। যাইহোক, আমি আসলে টুলভিডিয়েটার শ্রেণিতে কাস্টম মডিউলটি কল করতে পারি না। আমি ভাগ্যবিহীন পথে যুক্ত হওয়ার চেষ্টা করছি। আমি যখন এই পরিবর্তনগুলি স্ক্রিপ্টে প্রয়োগ করার চেষ্টা করি তখন আমি একটি রানটাইম ত্রুটি পাই: [এর্নো 9] খারাপ ফাইল বর্ণনাকারী। যদি আমি আমদানি লাইনটি মন্তব্য করি তবে কোনও ত্রুটি নেই।
sys.path.append('my_custom_module_directory')
import my_custom_module
আপনারা অনেকেই জিজ্ঞাসা করতে পারেন কেন আমি কেবল আরকোবজেক্টস সহ একটি কাস্টম সরঞ্জাম বাস্তবায়ন করি না। কারণটি হ'ল আমার শেষ ব্যবহারকারীদের কাছে তাদের কম্পিউটারে কোনও ডল নিবন্ধনের জন্য প্রয়োজনীয় প্রাইভেলিজ নেই।
আপডেট: এটি আমার সাথে আরকিজিআইএস 10 তে ঘটছিল মজার ব্যাপারটি যথেষ্ট, আমি প্রাথমিকভাবে টুলভালিডেটর শ্রেণীর প্রাথমিক পর্বের ফাংশনগুলির অভ্যন্তরের পথটিতে সংযোজন করছিলাম। যদি আমি টুলভালিডেটর শ্রেণীর বাইরে অ্যাপ্লিকেশন (অর্থাত্ উপরে) করি তবে সবকিছু প্রত্যাশার মতো কাজ করে।
sys.path.append('C:/Working/SomeFolder')
import somescript -------->THIS WORKS
class ToolValidator:
"""Class for validating a tool's parameter values and controlling
the behavior of the tool's dialog."""
def __init__(self):
"""Setup arcpy and the list of tool parameters."""
import arcpy
sys.path.append('C:/Working/SomeFolder')
import somescript -------> THIS DOESNT WORK
self.params = arcpy.GetParameterInfo()
আপডেট 2: আমি আমার সমস্যার সঠিক কারণ খুঁজে পেয়েছি বলে মনে করি। এই পোস্টে কোড স্নিপেটে, আমি সাইন.প্যাথটিতে প্রকৃত পাথ (প্রাক্তন সি: / ওয়ার্কিং / সামোয়ার্ডার) হিসাবে প্রদর্শিত হবে তা সংযোজন করছি। আমার প্রকৃত টুলভালিডেটর ক্লাসে, আমি os.path.dirname(__file__)
"" \ আমার_স্পেশাল_ফোল্ডার ... " ব্যবহার করে একটি আপেক্ষিক পথ তৈরি করছিলাম। আমি প্রত্যাশা করছিলাম যে os.path.dirname(__file__)
টুলবক্সের পথটি ফিরিয়ে আনবে, যেহেতু এতে টুলভালিডেটর শ্রেণি রয়েছে। আমি বিষয়টি দেখতে এসেছি। আমি যতদূর বলতে পারি, টুলভালিডেটর ক্লাসটি আসলে কোনও .py ফাইলে লেখা হয় না এবং আমি অনুমান করি যে এই কোডটি মেমরির ক্ষেত্রে পাইথন ইন্টারপ্রেটারের কাছে প্রেরণ করা হয়েছে, তাই __file__
অকেজো, বা কিছু টেম্প স্ক্রিপ্ট স্থির থাকে এবং তারপরে এক্সিকিফল ( path_to_script) বলা হয়, আবার রেন্ডারিং__file__
বেহুদা। আমি নিশ্চিত যে আমিও মিস করছি এমন আরও কিছু কারণ রয়েছে।
দীর্ঘ গল্প সংক্ষিপ্ত, আমি যদি একটি হার্ডকোডযুক্ত পথ ব্যবহার করি তবে sys.append কোথাও কাজ করে, অপেক্ষাকৃত পাথগুলি টুলভালিডেটর শ্রেণিতে এত ভাল কাজ করে না।