আমি এই প্রশ্নে কয়েকটি ভিন্নতাও সামলানোর চেষ্টা করব:
- ডাকা স্ক্রিপ্টের পথ সন্ধান করা
- বর্তমানে সম্পাদনকারী স্ক্রিপ্টের পথ সন্ধান করছে
- বলা স্ক্রিপ্ট ডিরেক্টরি খুঁজে
(এইগুলির কয়েকটি প্রশ্ন এসও-তে জিজ্ঞাসা করা হয়েছিল, তবে নকল হিসাবে বন্ধ করে এখানে পুনর্নির্দেশ করা হয়েছে))
ব্যবহারের গুহা __file__
আপনি যে মডিউলটি আমদানি করেছেন তার জন্য:
import something
something.__file__
মডিউলটির পরম পথটি ফিরিয়ে দেবে । যাইহোক, fol.G স্ক্রিপ্ট foo.py দেওয়া:
#foo.py
print '__file__', __file__
এটিকে 'পাইথন foo.py' দিয়ে কল করা সহজভাবে ফিরে আসবে 'foo.py'। যদি আপনি একটি শেবাং যোগ করেন:
#!/usr/bin/python
#foo.py
print '__file__', __file__
এবং ./foo.py ব্যবহার করে এটি কল করুন, এটি './foo.py' ফিরে আসবে। একে অন্য ডিরেক্টরি থেকে কল করা, (উদাহরণস্বরূপ ডিরেক্টরি বারে foo.py রাখুন), তারপরে হয় কল করুন
python bar/foo.py
বা একটি শেবাং যুক্ত করে সরাসরি ফাইলটি কার্যকর করা:
bar/foo.py
'বার / foo.py' ( আপেক্ষিক পথ) ফিরে আসবে ।
ডিরেক্টরিটি সন্ধান করা হচ্ছে
ডিরেক্টরিটি পেতে এখন সেখান থেকে os.path.dirname(__file__)
যাওয়াও কৌশলকর হতে পারে। কমপক্ষে আমার সিস্টেমে, যদি আপনি ফাইলটিকে একই ডিরেক্টরি থেকে কল করেন তবে এটি একটি খালি স্ট্রিং দেয়। প্রাক্তন।
# foo.py
import os
print '__file__ is:', __file__
print 'os.path.dirname(__file__) is:', os.path.dirname(__file__)
আউটপুট হবে:
__file__ is: foo.py
os.path.dirname(__file__) is:
অন্য কথায়, এটি একটি খালি স্ট্রিং ফিরিয়ে দেয়, সুতরাং আপনি যদি বর্তমান ফাইলটির জন্য এটি ব্যবহার করতে চান ( কোনও আমদানি করা মডিউলটির ফাইলের বিপরীতে ) এটি নির্ভরযোগ্য বলে মনে হয় না । এটির কাছাকাছি যেতে, আপনি এটি অ্যাবসপথের কলটিতে মোড়ানো করতে পারেন:
# foo.py
import os
print 'os.path.abspath(__file__) is:', os.path.abspath(__file__)
print 'os.path.dirname(os.path.abspath(__file__)) is:', os.path.dirname(os.path.abspath(__file__))
যা এরকম কিছু তৈরি করে:
os.path.abspath(__file__) is: /home/user/bar/foo.py
os.path.dirname(os.path.abspath(__file__)) is: /home/user/bar
নোট করুন যে অ্যাবস্পাথ () সিমলিংকগুলি সমাধান করে না। আপনি যদি এটি করতে চান তবে এর পরিবর্তে রিয়েলপথ () ব্যবহার করুন। উদাহরণস্বরূপ, নিম্নলিখিত বিষয়বস্তু সহ ফাইল_ইম্পোর্ট_স্টেস্টিং.পিতে পয়েন্ট করে একটি সিমলিংক ফাইল_ইম্পোর্ট_টেষ্টিং_লিঙ্ক তৈরি করা:
import os
print 'abspath(__file__)',os.path.abspath(__file__)
print 'realpath(__file__)',os.path.realpath(__file__)
এক্সিকিউটিভ পরম পাথের এমন কিছু মুদ্রণ করবে:
abspath(__file__) /home/user/file_test_link
realpath(__file__) /home/user/file_test.py
file_import_testing_link -> file_import_testing.py
পরিদর্শন ব্যবহার
@ সুমারব্রিজ পরিদর্শন মডিউলটি ব্যবহার করে উল্লেখ করেছেন ।
এটি আমদানি করা মডিউলগুলির জন্য ভালভাবে কাজ করে এবং বেশ সংক্ষিপ্ত বলে মনে হচ্ছে:
import os
import inspect
print 'inspect.getfile(os) is:', inspect.getfile(os)
আনুগত্যের সাথে পরম পথে ফিরে আসে। তবে বর্তমানে সম্পাদনকারী স্ক্রিপ্টের পথ সন্ধান করার জন্য, আমি এটি ব্যবহার করার কোনও উপায় দেখিনি।