Existe uma maneira portátil de obter o nome de usuário do usuário atual em Python (ou seja, um que funcione no Linux e no Windows, pelo menos). Funcionaria como os.getuid
:
>>> os.getuid()
42
>>> os.getusername()
'slartibartfast'
Eu pesquisei e fiquei surpreso por não encontrar uma resposta definitiva (embora talvez eu estivesse apenas pesquisando mal). O módulo pwd fornece uma maneira relativamente fácil de conseguir isso no Linux, por exemplo, mas não está presente no Windows. Alguns dos resultados da pesquisa sugeriram que a obtenção do nome de usuário no Windows pode ser complicada em determinadas circunstâncias (por exemplo, executando como um serviço do Windows), embora eu não tenha verificado isso.
python
portability
username
Jacob Gabrielson
fonte
fonte
import pwd, os; print pwd.getpwuid(os.getuid()).pw_gecos
ouimport pwd, os; print pwd.getpwuid(os.getuid()).pw_name
Respostas:
Veja o módulo getpass
Disponibilidade: Unix, Windows
ps Por comentário abaixo ", esta função examina os valores de várias variáveis de ambiente para determinar o nome do usuário. Portanto, essa função não deve ser usada para fins de controle de acesso (ou possivelmente para qualquer outro propósito, pois permite que qualquer usuário se faça passar por outro) ). "
fonte
Sua melhor aposta seria combinar
os.getuid()
compwd.getpwuid()
:Consulte os documentos pwd para obter mais detalhes:
http://docs.python.org/library/pwd.html
fonte
pwd.getpwuid(os.getuid()).pw_name
.ImportError: No module named pwd
sudo
caso corretamente. (Estou ciente do didn OP '; t pedir unix-like ssytems.)Você também pode usar:
fonte
Você provavelmente pode usar:
ou
Mas não será seguro porque as variáveis de ambiente podem ser alteradas.
fonte
os.getenv(...)
foi descontinuado em favor deos.environ[...]
.os.getenv
não parece ser preterido ..?Isso pode funcionar. Não sei como eles se comportam quando executam como serviço. Eles não são portáteis, mas é o que
os.name
eif
declarações são para.Consulte: http://timgolden.me.uk/python/win32_how_do_i/get-the-owner-of-a-file.html
fonte
SET USERNAME=FAKE
antes de seu comando pythonSe você precisar disso para obter o diretório inicial do usuário, abaixo poderá ser considerado portátil (pelo menos win32 e linux), parte de uma biblioteca padrão.
Além disso, você pode analisar essa string para obter apenas o último componente do caminho (por exemplo, nome de usuário).
Consulte: os.path.expanduser
fonte
Para mim, usar o
os
módulo é o melhor para portabilidade: funciona melhor no Linux e no Windows.Resultado:
Janelas:
Linux:
Não há necessidade de instalar nenhum módulo ou extensão.
fonte
Combinado
pwd
egetpass
abordagem, com base em outras respostas:fonte
Para UNIX, pelo menos, isso funciona ...
edit: Eu apenas procurei e isso funciona no Windows e UNIX:
No UNIX, ele retorna seu nome de usuário, mas no Windows, retorna o grupo de usuários, barra, seu nome de usuário.
-
IE
UNIX retorna: "nome de usuário"
O Windows retorna: "domínio / nome de usuário"
-
É interessante, mas provavelmente não é o ideal, a menos que você esteja fazendo algo no terminal de qualquer maneira ... nesse caso, você provavelmente usaria
os.system
para começar. Por exemplo, há um tempo atrás eu precisava adicionar meu usuário a um grupo, então fiz (isso é no Linux, lembre-se)Eu sinto que é mais fácil de ler e você não precisa importar pwd ou getpass.
Também sinto que ter "domínio / usuário" pode ser útil em certos aplicativos no Windows.
fonte
domain/user
nãogroup/user
user = subprocess.check_output("whoami").replace("\r\n", "")
chpst -u nobody python ./manage.py celerycam --pidfile=/var/run/celerycam/celerycam.pid
eu não tenho ninguém . segundo,user = subprocess.check_output("whoami").strip()
é mais portátil que os feeds de linha de substituição acima.commands
vssubprocess
parece nitpicky mas comandos está faltando python 3.Escrevi o módulo plx há algum tempo para obter o nome do usuário de maneira portátil no Unix e no Windows (entre outras coisas): http://www.decalage.info/en/python/plx
Uso:
(requer extensões win32 no Windows)
fonte
Usando apenas bibliotecas python padrão:
Funciona em Windows, Mac ou Linux
Como alternativa, você pode remover uma linha com uma chamada imediata:
fonte
Você pode obter o nome de usuário atual no Windows acessando a API do Windows, embora seja um pouco complicado invocar por meio dos tipos FFI ( GetCurrentProcess → OpenProcessToken → GetTokenInformation → LookupAccountSid ).
Eu escrevi um pequeno módulo que pode fazer isso diretamente do Python, getuser.py . Uso:
Funciona no Windows e no * nix (este último usa o
pwd
módulo conforme descrito nas outras respostas).fonte