Preciso definir algumas variáveis de ambiente no script python e quero que todos os outros scripts chamados de python vejam o conjunto de variáveis de ambiente.
Se eu fizer
os.environ["DEBUSSY"] = 1`
queixa-se dizendo que 1
tem que ser uma corda.
Também quero saber como ler as variáveis de ambiente em python (na parte posterior do script) depois de configurá-lo.
python
environment-variables
prahallada
fonte
fonte
Respostas:
As variáveis de ambiente devem ser cadeias de caracteres, portanto, use
para definir a variável
DEBUSSY
para a sequência1
.Para acessar essa variável posteriormente, basta usar:
Os processos filhos herdam automaticamente as variáveis de ambiente do processo pai - nenhuma ação especial da sua parte é necessária.
fonte
putenv()
, mas para o Unixen não há nada que você possa fazer de qualquer maneira. Até a versão antiga do AIX e HPUX com a qual trabalhei o suportava. Se alguém conseguir encontrar um computador que não o suporta hoje, tenho sérias dúvidas de que eles poderão executar o Python nesse computador. :)Pode ser necessário considerar alguns aspectos adicionais para a robustez do código;
ao armazenar uma variável com valor inteiro como variável de ambiente, tente
para recuperação, considere que, para evitar erros, tente
possivelmente substitua '-1' por 'Não definido'
então, para juntar tudo isso
fonte
myvar = int(os.environ.get('MYVAR')) if os.environ.get('MYVAR', '') != '' else None
- de que maneira seria Nenhum se nenhum número foi fornecidovalue_not_set = '-1'
). Então, você pode usardebussy = int(os.environ.get('DEBUSSY', value_not_set))
os.environ
se comporta como um dicionário python, para que todas as operações comuns do dicionário possam ser executadas. Além das operaçõesget
eset
mencionadas nas outras respostas, também podemos simplesmente verificar se existe uma chave. As chaves e os valores devem ser armazenados como seqüências de caracteres .Python 3
Para python 3, os dicionários usam a palavra-chave in em vez de has_key
Python 2
Há uma coisa importante a ser observada sobre o uso
os.environ
:Embora os processos filhos herdem o ambiente do processo pai, eu deparei com um problema recentemente e descobri que, se você tiver outros scripts atualizando o ambiente enquanto o script python estiver em execução, a chamada
os.environ
novamente não refletirá os valores mais recentes .Trecho dos documentos :
os.environ.data
que armazena todas as variáveis de ambiente, é um objeto dict, que contém todos os valores do ambiente:fonte
os.environ.data
foi renomeado no Python 3.2 paraos.environ._data
, o prefixo de sublinhado mostrando que você não deve lê-lo diretamente. De qualquer forma,os.environ._data
não terá valores atualizados de qualquer maneira.Então faça
Basta usar
os.environ["DEBUSSY"]
, como emfonte
para definir variável:
item Método de atribuição usando a chave:
para obter ou verificar se existe ou não,
Como os.environ é uma instância, você pode tentar o caminho do objeto.
Método 1:
receberá
'1'
como valor de retornoMétodo 2:
Método 3:
Método 4:
fonte
Você deve atribuir o valor da string à variável de ambiente.
os.environ["DEBUSSY"] = "1"
Se você quiser ler ou imprimir a variável de ambiente, use
print os.environ["DEBUSSY"]
Essas alterações serão efetivas apenas para o processo atual em que foram atribuídas, não alterando o valor permanentemente. Os processos filhos herdarão automaticamente o ambiente do processo pai.
fonte
set [<name>=[<value>]]
mas apenas o faz para o atual processo em execução. Quando fecho o cmd, ele não existe e mesmo quando está aberto, outros programas não conseguem vê-lo.Que tal
os.environ["DEBUSSY"] = '1'
? Variáveis de ambiente são sempre strings.fonte
Eu tenho tentado adicionar variáveis de ambiente. Meu objetivo era armazenar algumas informações do usuário em variáveis do sistema, para que eu possa usá-las em soluções futuras, como uma alternativa aos arquivos de configuração. No entanto, o método descrito no código abaixo não me ajudou em nada.
Esse simples bloco de código funciona bem, no entanto, essas variáveis existem dentro dos respectivos processos, de modo que você não as encontrará na guia de variáveis de ambiente das configurações do sistema Windows. Muito acima do código não serviu ao meu propósito. Esse problema é discutido aqui: problema de economia de variável
Outra tentativa mal sucedida. Então, finalmente, consegui salvar a variável com sucesso dentro do registro do ambiente da janela, imitando os comandos do shell do windows envolvidos na classe do sistema do pacote os. O código a seguir descreve essa tentativa bem-sucedida.
Espero que isso seja útil para alguns de vocês.
fonte
Deve-se observar que, se você tentar definir a variável de ambiente como uma avaliação do bash, ela não armazenará o que você espera. Exemplo:
Isso não avaliará como faz em um shell; portanto, em vez de ficar
/Library/Java/JavaVirtualMachines/jdk1.8.0_144.jdk/Contents/Home
como um caminho, você obterá a expressão literal$(/usr/libexec/java_home)
.Avalie-o antes de definir a variável de ambiente, da seguinte maneira:
fonte
Você pode usar o
os.environ
dicionário para acessar suas variáveis de ambiente.Agora, um problema que tive foi que, se eu tentasse usar
os.system
um arquivo em lotes que define suas variáveis de ambiente (usando o comando SET em um arquivo **. Bat *), ele realmente não as definiria para o seu ambiente python (mas para o processo filho que é criado com aos.system
função). Para realmente obter as variáveis definidas no ambiente python, eu uso este script:fonte
Ao jogar com variáveis de ambiente (adicionar / modificar / remover variáveis), uma boa prática é restaurar o estado anterior na conclusão da função.
Você pode precisar de algo como o
modified_environ
gerenciador de contexto descrito nesta pergunta para restaurar as variáveis de ambiente.Uso clássico:
fonte