gpt4 book ai didi

python - 将 Python 的 os.environ 重置为命令 shell 的默认值的正确方法

转载 作者:可可西里 更新时间:2023-11-01 10:47:08 24 4
gpt4 key购买 nike

将 os.environ 重置为命令 shell 中的默认值的 pythonic 方法是什么?我可以通过首先将 os.environ 插入默认字典来处理这个问题,但是如果在导入我的之前 os.environ 被另一个模块更改,该方法将失败。

在 Windows 中,我目前可以像这样重置值:

import os, subprocess, tempfile

def is_locked(filepath):
''' Needed to determine when the set command below completes
'''
locked = None
file_object = None
if os.path.exists(filepath):
try:
buffer_size = 8
file_object = open(filepath, 'a', buffer_size)
if file_object:
locked = False
except IOError, message:
locked = True
finally:
if file_object:
file_object.close()
else:
locked = True
return locked

# Define a Windows command which would dump default env variables into a tempfile
#
# - start /i will give default cmd.exe environment variable to what follows.
# It's the only way i found to get cmd.exe's default env variables and because
# start terminates immediately i need to use is_locked defined above to wait for
# Window's set command to finish dumping it's variables into the temp file
# - /b is will prevent a command shell to pop up
temp = tempfile.mktemp()
cmd = 'start /i /b cmd /c set>%s'%temp
p = subprocess.Popen(cmd, shell=True)
p.wait()

# Wait for the command to complete and parse the tempfile
data = []
while(is_locked(temp)):
pass

with open(temp,'r') as file:
data = file.readlines()
os.remove(temp)

# defaults will contain default env variables
defaults = dict()
for env in data:
env = env.strip().split('=')
defaults[env[0]]=env[1]

print '%s %s'%(env[0],env[1])


os.environ = dict(defaults)

我的方法目前在 python 2.7.3 64 位中有效,但我只是注意到当我在 32 位中运行它时,PROGRAMFILES 和 PROGRAMFILES(x86) env 变量都指向“Program Files (x86)”,这是一个讨论的问题here .

在此先感谢您的帮助!

最佳答案

我想知道你的 hack 是否有效,因为 child 继承 parent 的当前环境是设计的。所以我认为除了在应用程序启动时保存环境之外别无选择。不过,这不一定是从开始菜单启动的 shell 的环境,因为您的 parent 也可以操纵它。

做以下实验:启动一个资源管理器,从中运行一个 shell 并调查环境。然后直接从开始菜单启动一个shell并再次检查。现在转到控制面板 ->系统并添加一个变量。重新启动这两个 shell(但不是资源管理器)并注意区别。

要获得“根”环境(在登录时创建的环境),您可以在 HKCU/Environment 中读取 key 。但这也可能很老套。

关于python - 将 Python 的 os.environ 重置为命令 shell 的默认值的正确方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19580347/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com