Python 更改 Windows 路径(刷新 Shell)

标签 python windows variables

我这里有一个 Python 脚本,它是从 Windows CMD 调用的。 它正在执行一些命令并更改 Windows 环境变量。现在我用命令“setx”改变了它们。我必须重新启动另一个 Shell,以便将新变量加载到其中。

我调用脚本的主 shell 是否可以更新变量本身?

或者是否可以使用新变量启动另一个 shell,脚本将在新打开的 shell 中继续?

谢谢

最佳答案

每个进程都有自己的环境。当一个进程启动另一个进程时,新进程会获得其父环境的(最终修改的)副本。

规则是:

  • 一个进程可以修改它自己的环境——这个修改将被以后启动的子进程继承
  • 进程可以(在启动时)修改其子进程的环境
  • 进程永远不能修改其父进程的环境 (*)

因此,当您从 cmd.exe 启动 Python 脚本时:

  • 脚本可以改变它自己的环境,这些变化将被脚本及其所有子脚本的所有后续命令可见
  • 脚本不能更改其父 cmd.exe 的环境,也不能更改该 cmd.exe 的后续命令的环境

如果换环境后需要执行其他批处理命令,则需要为python脚本启动一个新的cmd.exe,让这个新的shell执行其他命令,或者直接执行.bat 文件(均通过 subprocess 模块)。


setx 是一个完全不同的东西:它更新提供给从 Windows 资源管理器(包括 cmd.exe)启动的进程的默认环境。该环境永久存储在 Windows 注册表中,并且对其进行的每次更改都会广播到所有事件进程......监视它。任何 Windows GUI 应用程序都可以处理它(资源管理器可以 - 这就是每个资源管理器窗口立即知道当前默认环境是什么的方式),但控制台应用程序通常不会。


(*) 好吧,在旧的 MS/DOS 系统中,.com 可执行文件曾经是可能的,甚至被记录在案。在 Windows 最新系统上应该可以通过 WriteProcessMemory API 调用,但绝对没有记录(感谢 eryksun 注意到)

关于Python 更改 Windows 路径(刷新 Shell),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29744940/

相关文章:

Python变量怪异?

arrays - BASH:将 $1 评估为字符串以调用数组长度

python - 数据帧非零列的平均值和标准差

python - 从python中的字符串中剥离@标签

c++ - 如何检查麦克风和扬声器是否来自同一个声卡?

php - 通过 jQuery-AJAX load() 函数将 PHP 变量作为变量传递给 JavaScript

python - 'p' 在 Django 中有特殊含义吗?

python - 使用 Python 进行精确的事件同步

c - 了解一些源代码

windows - 确定远程连接目标的代码