通过python设置OS环境变量

通过python设置OS环境变量,python,Python,Python中是否有方法设置在Python脚本结束后仍然存在的OS环境变量?。。因此,如果我在Python脚本中分配了一个变量,并且脚本结束,我希望在通过终端运行“printenv”后,该变量可用。我已经尝试使用os.system使用sh库,但一旦程序完成,var就无法通过“printenv”使用了。您不能这样做。默认情况下,子进程继承父进程的环境,但不可能相反 事实上,在子进程启动后,所有其他进程的内存都会受到保护(上下文执行分离)。这意味着它不能修改另一个进程的状态(内存) 它最多只能发送I

Python中是否有方法设置在Python脚本结束后仍然存在的OS环境变量?。。因此,如果我在Python脚本中分配了一个变量,并且脚本结束,我希望在通过终端运行“printenv”后,该变量可用。我已经尝试使用os.system使用sh库,但一旦程序完成,var就无法通过“printenv”使用了。

您不能这样做。默认情况下,子进程继承父进程的环境,但不可能相反

事实上,在子进程启动后,所有其他进程的内存都会受到保护(上下文执行分离)。这意味着它不能修改另一个进程的状态(内存)

它最多只能发送IPC信号


更多技术说明:您需要调试进程(例如使用
gdb
)以控制其内部状态。调试器使用特殊的内核API来读写内存或控制其他进程的执行。

您可以做
ssh-agent
gpg-agent
和类似工具所做的事情:在stdout上发出shell脚本,并记录用户应
eval
程序的输出,以激活该脚本设置的变量

#!/usr/bin/env python
import shlex, pipes, sys

# pipes.quote on Python 2, shlex.quote on Python 3
quote = shlex.quote if hasattr(shlex, 'quote') else pipes.quote

# Detect when user **isn't** redirecting our output, and emit a warning to stderr
if sys.stdout.isatty():
    sys.stderr.write("WARNING: This program's output should be used as follows:\n")
    sys.stderr.write('           eval "$(yourprog)"\n')
    sys.stderr.write("         Otherwise environment variables will not be honored.\n")

new_vars={'foo': 'bar', 'baz': 'qux'}
for (k, v) in new_vars.items():
    sys.stdout.write('%s=%s; ' % (quote(k), quote(v)))
    sys.stdout.write('\n')

使用
quote()
可以确保即使像
foo=$(运行某物)
这样的值也被指定为文本值,而不是调用
runsomething
作为命令。

不行,没有进程可以。。。您必须从python中设置变量,然后在同一进程中运行后续shell。对于linux操作系统,将变量写入
.bashrc
/etc/environment
@RaunakAgarwal,这些仅在生成新shell时适用。对于.bashrc,除非它是一个交互式shell,否则不会对其进行源代码获取;如果用户希望将这些变量导入shell,他们需要执行类似于
eval“$(ssh代理)”
的操作。您可以修改操作系统从中选取环境变量的文件/注册表,但这些文件/注册表不会应用于当前环境(shell),只适用于新启动的环境。谢谢。。我将探索以上,似乎给了我什么,我正在寻找。