python সহজ পাইথন বর্তমান ব্যবহারকারী নাম পেতে একটি পোর্টেবল উপায় আছে?



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

এই কাজ করতে পারে। আমি সেবা হিসাবে চলমান যখন তারা আচরণ কিভাবে জানি না। তারা পোর্টেবল নয়, তবে এটি "os.name" এবং "if" বিবৃতিগুলির জন্য রয়েছে।

win32api.GetUserName ()

win32api.GetUserNameEx (...)

দেখুন: http://timgolden.me.uk/python/win32_how_do_i/get-the-owner-of-a-file.html

বর্তমান ব্যবহারকারীর ব্যবহারকারীর নাম পাইথনে পেতে পোর্টেবল উপায় রয়েছে (অর্থাত্, যেটি লিনাক্স এবং উইন্ডোজ উভয়ই কমপক্ষে কাজ করে)। এটা os.getuid মত কাজ করবে:

>>> os.getuid()
42
>>> os.getusername()
'slartibartfast'

আমি প্রায় googled এবং একটি definitive উত্তর খুঁজে পেতে বিস্মিত ছিল না (যদিও সম্ভবত আমি poorly googling ছিল)। pwd মডিউল লিনাক্সের অধীনে এটি অর্জনের অপেক্ষাকৃত সহজ উপায় সরবরাহ করে, তবে এটি উইন্ডোজগুলিতে উপস্থিত নয়। অনুসন্ধান ফলাফলে কিছু কিছু জানানো হয়েছে যে উইন্ডোজ এর অধীনে ব্যবহারকারী নামটি নির্দিষ্ট পরিস্থিতিতে (যেমন, উইন্ডোজ পরিষেবা হিসাবে চলমান) জটিল হতে পারে, যদিও আমি এটি যাচাই করি নি।


আপনি যদি ব্যবহারকারীর হোম ডির পেতে এটির প্রয়োজন বোধ করেন তবে নিচের পোর্টেবলটি (কমপক্ষে Win32 এবং লিনাক্স) স্ট্যান্ডার্ড লাইব্রেরির অংশ হিসাবে বিবেচিত হতে পারে।

>>> os.path.expanduser('~')
'C:\\Documents and Settings\\johnsmith'

এছাড়াও আপনি শুধুমাত্র শেষ পাথ উপাদান (যেমন ব্যবহারকারীর নাম) পেতে এই ধরনের স্ট্রিং পার্স করতে পারে।

দেখুন: os.path.expanduser


আপনি সম্ভবত ব্যবহার করতে পারেন:

os.environ.get('USERNAME')

অথবা

os.environ.get('USER')

কিন্তু এটি নিরাপদ হতে যাচ্ছে না কারণ পরিবেশের পরিবর্তনগুলি পরিবর্তন করা যেতে পারে।


os মডিউল ব্যবহার করে আমার পোর্টেবিলিটির জন্য সেরা দেখায়: লিনাক্স এবং উইন্ডোজ উভয় ক্ষেত্রেই সর্বোত্তম কাজ করে।

import os

# Gives user's home directory
userhome = os.path.expanduser('~')          

print "User's home Dir: " + userhome

# Gives username by splitting path based on OS
print "username: " + os.path.split(userhome)[-1]           

আউটপুট:

উইন্ডোজ:

ব্যবহারকারীর বাসা Dir: C: \ Users \ Myuser

ব্যবহারকারীর নাম: মাইসার

লিনাক্স:

ব্যবহারকারীর বাসা Dir: / root

ব্যবহারকারীর নাম: রুট

কোন মডিউল বা এক্সটেনশন ইনস্টল করার প্রয়োজন নেই।


getpass মডিউল তাকান

import getpass
getpass.getuser()
'kostya'

প্রাপ্যতা: ইউনিক্স, উইন্ডোজ

ps নীচের মন্তব্যটি " এই ফাংশনটি ব্যবহারকারীর নাম নির্ধারণ করার জন্য বিভিন্ন পরিবেশের ভেরিয়েবলের মানগুলি দেখায়। সুতরাং, এই ফাংশনটি অ্যাক্সেস নিয়ন্ত্রণের উদ্দেশ্যে (অথবা সম্ভবত অন্য কোনো উদ্দেশ্যে) নির্ভর করা উচিত নয়, যেহেতু এটি কোনও ব্যবহারকারীকে অন্য কোনও )। "


UNIX এর জন্য, অন্তত, এটি কাজ করে ...

import commands
username = commands.getoutput("echo $(whoami)")
print username

সম্পাদনা: আমি এটি দেখেছি এবং এটি উইন্ডোজ এবং ইউনিক্সে কাজ করে:

import commands
username = commands.getoutput("whoami")

ইউনিক্সে এটি আপনার ব্যবহারকারী নামটি ফেরত দেয়, তবে উইন্ডোজগুলিতে, এটি আপনার ব্যবহারকারীর গোষ্ঠী, স্ল্যাশ, আপনার ব্যবহারকারী নামটি ফেরত দেয়।

-

আই ই

ইউনিক্স ফেরত: "ব্যবহারকারীর নাম"

উইন্ডোজ ফেরত: "ডোমেন / ব্যবহারকারীর নাম"

-

এটি আকর্ষণীয়, তবে সম্ভবত আদর্শ নয় যতক্ষণ না আপনি টার্মিনালে কিছু করছেন ... যে ক্ষেত্রে আপনি সম্ভবত সিস্টেম os.system ব্যবহার করতে চান। উদাহরণস্বরূপ, কিছুক্ষণ আগে আমি আমার ব্যবহারকারীকে একটি গোষ্ঠীতে যোগ করার প্রয়োজন ছিল, তাই আমি করেছি (এটি লিনাক্সে আছে, মনে রাখবেন)

import os
os.system("sudo usermod -aG \"group_name\" $(whoami)")
print "You have been added to \"group_name\"! Please log out for this to take effect"

আমি পড়তে সহজ যে মনে হয় এবং আপনি pwd বা gopass আমদানি করতে হবে না।

উইন্ডোজ এর কিছু অ্যাপ্লিকেশনগুলিতে "ডোমেন / ইউজার" সহায়ক হতে পারে বলে আমি মনে করি।


উইন্ডোজ এপিআই এর মাধ্যমে আপনি উইন্ডোজ এ বর্তমান ইউজারনেম পেতে পারেন, যদিও এটি সিটিপিএস FFI ( OpenProcessTokenGetTokenInformationLookupAccountSidLookupAccountSid ) এর মাধ্যমে আহ্বান করা একটু কষ্টকর।

আমি একটি ছোট মডিউল লিখেছি যা পাইথন থেকে সরাসরি এটি পেতে পারে, getuser.py । ব্যবহার:

import getuser
print(getuser.lookup_username())

এটি উইন্ডোজ এবং * নিক্স উভয় ক্ষেত্রে কাজ করে (পরবর্তী উত্তরটি pwd মডিউল ব্যবহার করে যা অন্যান্য উত্তরগুলিতে বর্ণনা করা হয়েছে)।


os.getuid() সহ pwd.getpwuid() কে একত্রিত করার জন্য আপনি সেরা bet পাবেন:

import os
import pwd

def get_username():
    return pwd.getpwuid( os.getuid() )[ 0 ]

আরো বিস্তারিত জানার জন্য pwd ডক্স দেখুন:

http://docs.python.org/library/pwd.html


ইউনিক্স এবং উইন্ডোজ (অন্যান্য জিনিসগুলির মধ্যে) এর পোর্টেবল উপায়ে ব্যবহারকারীর নাম পেতে কিছুদিন আগে আমি প্লেক্স মডিউল লিখেছিলাম: http://www.decalage.info/en/python/plx

ব্যবহার:

import plx

username = plx.get_username()

(এটি উইন্ডোজ Win32 এক্সটেনশন প্রয়োজন)


অন্যান্য উত্তরগুলির উপর ভিত্তি করে সম্মিলিত getpass এবং getpass পদ্ধতি:

try:
  import pwd
except ImportError:
  import getpass
  pwd = None

def current_user():
  if pwd:
    return pwd.getpwuid(os.geteuid()).pw_name
  else:
    return getpass.getuser()




username