【问题标题】:environment variables don't update from python [duplicate]环境变量不会从python更新[重复]
【发布时间】:2018-03-24 14:49:37
【问题描述】:

我尝试从 python 执行 csh 脚本(创建或更新环境变量),但返回 shell 后环境变量不会更新。 为什么 ?我该如何解决?

subprocess.call('script.csh',shell=True,executable="/bin/csh")

【问题讨论】:

  • 这不是 Python 问题。父进程不会从子进程继承。你甚至不能用 shell 脚本来做,除非你 source 脚本。
  • 我使用 tcsh。你的意思是 ?你能给我解决方法吗? @PM 2Ring
  • 解决方法是让 shell 脚本设置环境变量,然后执行您的 Python 脚本,而不是您现在尝试执行的方式。或者,您可以使用 os.environ 在 Python 中设置它们。
  • 对不起,我不明白你的建议。我从 python @kindall 执行 csh 脚本
  • 他说你不能调用子进程来做你正在做的事情。它必须是直接进程,因为您的环境变量可以传递给子进程,但子进程环境变量不会传递回父进程。例如,假设您有一个名为parent_process 的进程,其环境变量为"TEST"="MyTest",然后您生成名为child_process 的子进程,并在检查TEST env-var 时将TEST 覆盖为"TEST"="YourTest"回到你的 parent_process,它仍然是"TEST"="MyTest"

标签: python python-3.x shell unix csh


【解决方案1】:

要在python中设置环境变量,请使用

os.environ['YOUR_VARIABLE'] = "your_value"

注意环境变量必须是字符串。

解释为什么你不能做你想做的事:

环境变量设置在每个进程的内存空间中。当 bash(或任何你有的 shell)运行一个程序时,它使用 fork(),它继承了 bash 的变量,因为它是一个子进程。您要做的是创建一个子进程并让他的父进程从子进程中继承,就像@PM 2Ring 所说的那样。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2020-06-06
    • 2020-12-14
    • 1970-01-01
    • 1970-01-01
    • 2019-10-05
    • 2011-01-17
    • 2017-11-07
    • 1970-01-01
    相关资源
    最近更新 更多