Como desarmar a variável de ambiente 'http_proxy' em Python

2

Estou usando o código Python abaixo para redefinir a variável de ambiente http_proxy no Linux CentOS 6, mas isso não está desativando a variável para o resto do script Python.

Código:

 import os 
 print "Unsetting http..." 
 os.system("unset http_proxy") 
 os.system("echo $http_proxy") 
 print "http is reset"

Saída:

Unsetting http...
http://web-proxy.xxxx.xxxxxxx.net:8080
http is reset
Process finished with exit code 0
    
por Sum 20.02.2018 / 17:24

2 respostas

8

Cada invocação de os.system() é executada em seu próprio subshell, com seu próprio ambiente:

>>> import os
>>> os.system("echo $$")
97678
0
>>> os.system("echo $$")
97679
0

Você está desativando a variável http_proxy , mas sua subshell completou a execução do comando (a: unset ) e termina. Em seguida, você inicia um novo subshell com um novo ambiente no qual executar echo .

Acredito que o que você está tentando fazer é del os.environ['http_proxy'] , ou os.environ.pop('http_proxy') se você quiser garantir que não exista uma variável de ambiente http_proxy se existia ou não uma:

$ export foo=bar
$ python2
Python 2.7.10 (default, Jul 15 2017, 17:16:57)
[GCC 4.2.1 Compatible Apple LLVM 9.0.0 (clang-900.0.31)] on darwin
Type "help", "copyright", "credits" or "license" for more information.
>>> import os
>>> os.environ['foo']
'bar'
>>> del os.environ['foo']
>>> os.system('echo $foo')

0
    
por 20.02.2018 / 17:37
4

Cada chamada para os.system() está criando um processo separado. Do echo $$ dentro de ambos para ver que o PID muda com cada um.

Portanto, o seu primeiro os.system() gera um novo processo que contém unset s uma variável. Isso não afeta os valores das variáveis no processo do script python. Em seguida, o primeiro processo gerado sai e você gerar um novo processo. O segundo os.system() gera esse novo processo que herda todas as variáveis de ambiente do script python - que não foram tocadas. Então, é claro, o segundo processo gerado vê a variável, porque ela nunca foi unset no processo do script python, portanto, não perderá nenhum novo processo filho.

Veja link para saber como fazer isso em python e no link para os documentos oficiais.

    
por 20.02.2018 / 17:37