python脚本可以持久地更改Windows环境变量吗?(典雅)

Sal*_*ley 9 python windows scripting batch-file

继我之前的问题之后,是否有可能制作一个持久更改Windows环境变量的Python脚本?

一旦python解释器终止,对os.environ的更改不会保留.如果我在UNIX上编写脚本,我可能会这样做:

set foo=`myscript.py`
Run Code Online (Sandbox Code Playgroud)

但是,唉,cmd.exe没有任何像sh的后退行为一样的东西.我已经看到了一个非常冗长的解决方案......它确实非常可靠,我们可以改进这个:

for /f "tokens=1* delims=" %%a in ('python  ..\myscript.py') do set path=%path%;%%a
Run Code Online (Sandbox Code Playgroud)

当然,微软的头脑有一个比这更好的解决方案!

注意:这个问题的完全重复.

gim*_*mel 5

您可能想尝试由Mark Hammond开发的Python Win32 Extensions,它包含在ActivePython中(或者可以单独安装).您可以在Hammond和Robinson的书中学习如何执行许多与Windows相关的任务.

使用PyWin32访问Windows COM对象,Python程序可以使用环境属性的的WScript.Shell对象-环境变量的集合.


DNS*_*DNS 1

你的冗长的解决方案可能是最好的主意;我不相信直接从Python 可以实现这一点。本文建议另一种方法,使用临时批处理文件:

http://code.activestate.com/recipes/159462/

  • 这不会持续改变环境。它只是更改环境变量的副本。 (5认同)
  • @Salim Fadhley如果这就是你想要的,为什么你在你的问题中要求不同的东西?通过接受不能回答问题的答案,您会误导寻找信息的人们...... (2认同)
  • 确实,这个问题是模棱两可的,但也不是完全错误的。他寻求一种持久设置变量的方法,*而不是*全局设置。他的要求是解释器退出后仍然要设置该变量,这个解决方案就是这种情况。 (2认同)
  • @DNS **对环境变量的持续**更改始终意味着同一件事 - 更改它,以便新值对**所有**其他进程可见,而不仅仅是选定的进程。 (2认同)