【问题标题】:How to set environment variables for current Command Prompt session from Python如何从 Python 为当前的命令提示符会话设置环境变量
【发布时间】:2016-08-28 00:44:53
【问题描述】:

我已经被难住了太久了。希望有人能提供帮助。

我正在编写一个 Python CLI 应用程序,它需要为当前命令提示符会话 (Windows) 设置一个临时环境变量 (PATH)。应用程序已经使用 here 看到的方法为所有未来会话永久设置环境变量。

为了尝试为当前会话设置临时环境变量,我尝试了以下操作:

  • 使用os.environ设置环境变量
  • 使用答案here,它使用了一个临时文件。不幸的是,这在直接从 Cmd 提示符而不是 Python 运行时有效。
  • 使用subprocess.callsubprocess.check_call调用SET

该工具的用户将需要这个,因此他们不必关闭命令提示符即可利用我永久设置的环境变量。

我看到其他应用程序这样做,但我不确定如何使用 Python 来完成。

【问题讨论】:

  • 我不能明确地与 Windows 对话——但在 UNIX 上,父进程需要与子进程合作以修改其环境变量(缺少诸如附加调试器之类的技巧)完全是有意的和设计。
  • @CharlesDuffy,从技术上讲,在 Windows 中,通常可以(但并非总是)打开父进程的句柄并重写其环境变量——取决于父进程的 DACL、完整性级别以及它是否一个“受保护”的过程。但是,我认为这不是一个好主意。

标签: python windows environment-variables


【解决方案1】:

蛮力但直接的是将您的作业作为批处理脚本发送到标准输出,并在现有解释器中执行该脚本(类似于 bash 中的 source):

python myscript >%TEMP%\myscript-vars.bat
call %TEMP%\myscript-vars.bat
del %TEMP%\myscript-vars.bat

【讨论】:

  • 您可以从另一个自动处理此问题的批处理文件运行脚本。您希望将 .bat 文件写入%TEMP% 目录,因为用户可能没有对当前目录的写入权限。
  • @eryksun,两者都很好,根据%TEMP% 建议更新。
猜你喜欢
  • 2021-03-07
  • 2020-08-13
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-04-08
  • 2021-03-01
  • 1970-01-01
  • 2014-11-29
相关资源
最近更新 更多