python সহজ পাইথন দিয়ে স্ক্রিপ্টের ডিরেক্টরিটি কিভাবে পাব?




সহজ ভাষায় পাইথন ৩ pdf download (10)

এই প্রশ্নটি ইতিমধ্যে একটি উত্তর আছে:

নিম্নলিখিত পাইথন কোড বিবেচনা করুন:

import os
print os.getcwd()

আমি স্ক্রিপ্ট ফাইলের ডিরেক্টরি অবস্থান পেতে os.getcwd() ব্যবহার করি। যখন আমি কমান্ড লাইন থেকে স্ক্রিপ্টটি চালাও তখন এটি আমাকে সঠিক পথ দেয়, যখন আমি একটি Django ভিউতে কোড দ্বারা চালিত একটি স্ক্রিপ্ট থেকে এটি চালায় তখন এটি মুদ্রণ করে।

একটি Django দৃশ্য দ্বারা চালিত একটি স্ক্রিপ্ট মধ্যে থেকে আমি কিভাবে স্ক্রিপ্ট পথ পেতে পারি?

হালনাগাদ:
এতদূর উত্তরগুলি os.getcwd() - os.getcwd() এবং os.path.abspath() উভয় বর্তমান কার্যকারী ডিরেক্টরি দেয় যা স্ক্রিপ্টটি থাকে এমন ডিরেক্টরি হতে পারে বা হতে পারে না। আমার ওয়েব হোস্ট সেটআপ __file__ পাথ ছাড়া শুধুমাত্র ফাইল নাম দেয়।

পাইথনটিতে কোন উপায় নেই (সর্বদা) স্ক্রিপ্টটি যে পথে থাকে সেটি পাওয়ার যোগ্য হতে পারে?


এটি একটি পুরানো পুরানো থ্রেড কিন্তু আমি বর্তমান সমস্যাতে ফাইলগুলি সংরক্ষণ করার চেষ্টা করার সময় এই সমস্যাটি পেয়েছি যখন স্ক্রিন একটি ক্রন কাজ থেকে একটি পাইথন স্ক্রিপ্ট চালানোর সময় হয়। getcwd () এবং অন্য অনেক পথ আপনার হোম ডিরেক্টরি দিয়ে আসে।

আমি ব্যবহৃত স্ক্রিপ্ট একটি পরম পথ পেতে

directory = os.path.abspath(os.path.dirname(__file__))


import os,sys
# Store current working directory
pwd = os.path.dirname(__file__)
# Append current directory to the python path
sys.path.append(pwd)

sys.path[0] চেষ্টা করুন sys.path[0]

পাইথন ডক্স থেকে উদ্ধৃতি দিতে:

প্রোগ্রাম প্রারম্ভে শুরু হওয়ার পরে, এই তালিকাটির প্রথম আইটেম, path[0] , একটি ডিরেক্টরি যা পাইথন ইন্টারপ্রেটারটি ব্যবহার করতে ব্যবহৃত হয়। যদি স্ক্রিপ্ট ডিরেক্টরিটি উপলব্ধ না হয় (উদাহরণস্বরূপ, ইন্টারপ্রেটারটি ইন্টারেক্টিভভাবে বা যদি স্ক্রিপ্টটিকে স্ট্যান্ডার্ড ইনপুট থেকে পড়তে হয়), path[0] খালি স্ট্রিং, যা পাইথনকে বর্তমান ডিরেক্টরিতে মডিউল অনুসন্ধান করতে নির্দেশ করে। লক্ষ্য করুন যে PYTHONPATH ফলে এন্ট্রি সন্নিবেশিত হওয়ার আগে স্ক্রিপ্ট ডিরেক্টরিটি সন্নিবেশ করা হয়েছে।

উত্স: https://docs.python.org/library/sys.html#sys.path


import os
script_dir = os.path.dirname(os.path.realpath(__file__)) + os.sep

এই কোডটি:

import os
dn = os.path.dirname(os.path.realpath(__file__))

বর্তমান এক্সিকিউটিভ স্ক্রিপ্ট ধারণকারী ডিরেক্টরির নামের "dn" সেট করে। এই কোডটি:

fn = os.path.join(dn,"vcb.init")
fp = open(fn,"r")

"fn" থেকে "script_dir / vcb.init" (একটি প্ল্যাটফর্ম স্বাধীন ভাবে) সেট করে এবং সেই ফাইলটি বর্তমানে চলমান স্ক্রিপ্টটি পড়ার জন্য খোলে।

উল্লেখ্য যে "বর্তমানে চলমান স্ক্রিপ্ট" কিছুটা দ্বিধান্বিত। যদি আপনার পুরো প্রোগ্রামটিতে 1 টি স্ক্রিপ্ট থাকে তবে এটি বর্তমানে চলমান স্ক্রিপ্ট এবং "sys.path [0]" সমাধানটি কাজ করে। কিন্তু আপনার অ্যাপটিতে স্ক্রিপ্ট এ থাকে, যা কিছু প্যাকেজ "P" ​​আমদানি করে এবং তারপর "B" স্ক্রিপ্ট কল করে, তারপর "PB" বর্তমানে চলছে। যদি আপনি "PB" ধারণকারী ডিরেক্টরিটি পেতে চান, তবে আপনি " os.path.realpath(__file__) " সমাধানটি চান।

" __file__ " কেবল বর্তমান এক্সিকিউটিং (শীর্ষ-স্ট্যাক) স্ক্রিপ্টের নাম দেয়: "x.py"। এটা কোন পথ তথ্য দেয় না। এটি "os.path.realpath" কল যা বাস্তব কাজ করে।



আপনাকে os.path.realpath তে __file__ কল করতে হবে, যাতে যখন __file__ কোন পথ ছাড়াই একটি ফাইল নাম থাকে তখনও আপনি এখনও পথটি পাবেন:

import os
print(os.path.dirname(os.path.realpath(__file__)))

এটা চেষ্টা কর:

def get_script_path(for_file = None):
    path = os.path.dirname(os.path.realpath(sys.argv[0] or 'something'))
    return path if not for_file else os.path.join(path, for_file)

আমি ব্যবহার করি:

import os
import sys

def get_script_path():
    return os.path.dirname(os.path.realpath(sys.argv[0]))

আইহাম একটি মন্তব্যে উল্লেখ করে, আপনি এই ফাংশনটি একটি মডিউলে সংজ্ঞায়িত করতে এবং বিভিন্ন স্ক্রিপ্টগুলিতে এটি ব্যবহার করতে পারেন।


এখানে আমি শেষ পর্যন্ত কি। আমি যদি আমার স্ক্রিপ্টটি ইন্টারপ্রেটারে আমদানি করি তবে এটি আমার জন্য কাজ করে, এবং যদি আমি স্ক্রিপ্ট হিসাবে এটি কার্যকর করি:

import os
import sys

# Returns the directory the current script (or interpreter) is running in
def get_script_directory():
    path = os.path.realpath(sys.argv[0])
    if os.path.isdir(path):
        return path
    else:
        return os.path.dirname(path)






getcwd