当前位置:  开发笔记 > 编程语言 > 正文

是否可以在python中更改父进程的环境?

如何解决《是否可以在python中更改父进程的环境?》经验,为你挑选了3个好方法。

在Linux中当我从shell调用python时,它复制了它的环境,并启动了python进程.因此,如果我执行以下操作:

import os
os.environ["FOO"] = "A_Value"

当python进程返回时,FOO(假设它原来是未定义的)仍将是未定义的.有没有办法让python进程(或任何子进程)修改其父进程的环境?

我知道你通常用类似的东西来解决这个问题

source script_name.sh

但这与我的其他要求相冲突.



1> S.Lott..:

没有进程可以更改其父进程(或任何其他现有进程的环境).

但是,您可以通过使用已修改的环境创建新的交互式shell来创建新环境.

您必须生成一个使用升级环境的shell的新副本,并且可以访问现有的stdin,stdout和stderr,并进行重新初始化.

你需要做一些像使用subprocess.Popen运行的东西/bin/bash -i.

所以原始的shell运行Python,它运行一个新的shell.是的,你有很多进程在运行.不,它不是太糟糕,因为原始的shell和Python并没有真正做任何事情,除了等待子shell完成,所以他们也可以干净利落地退出.



2> Martin v. Lö..:

对于任何子进程,都不可能更改父进程的环境.您可以做的最好的事情是将shell语句输出到您之后获取的stdout,或将其写入您在父项中提供的文件.



3> JimB..:

我会使用bash eval语句,并让python脚本输出shell代码

child.py:

#!/usr/bin/env python
print 'FOO="A_Value"'

parent.sh

#!/bin/bash
eval `./child.py`

推荐阅读
手机用户2502851955
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有