Apakah ada cara portabel untuk mendapatkan nama pengguna pengguna saat ini dalam Python (yaitu, yang bekerja di Linux dan Windows, setidaknya). Ini akan bekerja seperti os.getuid
:
>>> os.getuid()
42
>>> os.getusername()
'slartibartfast'
Saya mencari di sekitar dan terkejut tidak menemukan jawaban yang pasti (meskipun mungkin saya hanya googling buruk). The pwd modul menyediakan cara yang relatif mudah untuk mencapai di bawah ini, mengatakan, Linux, tetapi tidak hadir pada Windows. Beberapa hasil pencarian menyarankan agar mendapatkan nama pengguna di Windows dapat menjadi rumit dalam keadaan tertentu (misalnya, berjalan sebagai layanan Windows), meskipun saya belum memverifikasi itu.
python
portability
username
Jacob Gabrielson
sumber
sumber
import pwd, os; print pwd.getpwuid(os.getuid()).pw_gecos
atauimport pwd, os; print pwd.getpwuid(os.getuid()).pw_name
Jawaban:
Lihatlah modul getpass
Ketersediaan: Unix, Windows
ps Per komentar di bawah " fungsi ini melihat nilai-nilai berbagai variabel lingkungan untuk menentukan nama pengguna. Oleh karena itu, fungsi ini tidak boleh diandalkan untuk tujuan kontrol akses (atau mungkin tujuan lain, karena memungkinkan setiap pengguna untuk menyamar sebagai yang lain). ). "
sumber
Anda bertaruh yang terbaik adalah menggabungkan
os.getuid()
denganpwd.getpwuid()
:Lihat dokumen pwd untuk lebih jelasnya:
http://docs.python.org/library/pwd.html
sumber
pwd.getpwuid(os.getuid()).pw_name
.ImportError: No module named pwd
sudo
kasus dengan benar. (Saya sadar OP tidak melakukannya; saya tidak meminta ssytem seperti-unix.)Anda juga bisa menggunakan:
sumber
Anda mungkin dapat menggunakan:
atau
Tapi itu tidak akan aman karena variabel lingkungan dapat diubah.
sumber
os.getenv(...)
tidak digunakan lagios.environ[...]
.os.getenv
sepertinya tidak ditinggalkan ..?Ini mungkin berhasil. Saya tidak tahu bagaimana mereka berperilaku ketika menjalankan sebagai layanan. Mereka tidak portabel, tapi untuk itulah
os.name
danif
pernyataan.Lihat: http://timgolden.me.uk/python/win32_how_do_i/get-the-owner-of-a-file.html
sumber
SET USERNAME=FAKE
sebelum perintah python AndaJika Anda memerlukan ini untuk mendapatkan dir home user, di bawah ini dapat dianggap sebagai portable (setidaknya win32 dan linux), bagian dari perpustakaan standar.
Anda juga dapat menguraikan string tersebut untuk mendapatkan hanya komponen jalur terakhir (mis. Nama pengguna).
Lihat: os.path.expanduser
sumber
Bagi saya menggunakan
os
modul terlihat yang terbaik untuk portabilitas: Berfungsi paling baik di Linux dan Windows.Keluaran:
Windows:
Linux:
Tidak perlu memasang modul atau ekstensi apa pun.
sumber
Gabungan
pwd
dangetpass
pendekatan, berdasarkan jawaban lain:sumber
Untuk UNIX, setidaknya, ini berfungsi ...
sunting: Saya baru saja mencarinya dan ini berfungsi pada Windows dan UNIX:
Pada UNIX ia mengembalikan nama pengguna Anda, tetapi pada Windows, ia mengembalikan grup pengguna Anda, slash, nama pengguna Anda.
-
YAITU
Pengembalian UNIX: "username"
Windows mengembalikan: "domain / nama pengguna"
-
Ini menarik, tetapi mungkin tidak ideal kecuali Anda melakukan sesuatu di terminal ... dalam hal ini Anda mungkin akan menggunakan
os.system
untuk memulai. Sebagai contoh, beberapa saat yang lalu saya perlu menambahkan pengguna saya ke grup, jadi saya melakukannya (ini di Linux, ingat)Saya merasa itu lebih mudah dibaca dan Anda tidak perlu mengimpor pwd atau getpass.
Saya juga merasa memiliki "domain / pengguna" dapat membantu dalam aplikasi tertentu di Windows.
sumber
domain/user
tidakgroup/user
user = subprocess.check_output("whoami").replace("\r\n", "")
chpst -u nobody python ./manage.py celerycam --pidfile=/var/run/celerycam/celerycam.pid
saya tidak punya siapa - siapa . kedua,user = subprocess.check_output("whoami").strip()
lebih portabel daripada mengganti linefeeds di atas.commands
vssubprocess
tampaknya nitpicky tetapi perintah hilang dari python 3.Saya menulis modul plx beberapa waktu lalu untuk mendapatkan nama pengguna dengan cara portabel di Unix dan Windows (antara lain): http://www.decalage.info/en/python/plx
Pemakaian:
(membutuhkan ekstensi win32 di Windows)
sumber
Hanya menggunakan lib python standar:
Bekerja di Windows, Mac atau Linux
Atau, Anda dapat menghapus satu baris dengan permintaan langsung:
sumber
Anda bisa mendapatkan nama pengguna saat ini di Windows dengan pergi melalui API Windows, meskipun agak sulit untuk dipanggil melalui ctypes FFI ( GetCurrentProcess → OpenProcessToken → GetTokenInformation → LookupAccountSid ).
Saya menulis sebuah modul kecil yang dapat melakukan ini langsung dari Python, getuser.py . Pemakaian:
Ini bekerja pada Windows dan * nix (yang terakhir menggunakan
pwd
modul seperti yang dijelaskan dalam jawaban lain).sumber