繁体   English   中英

从python脚本设置bash环境变量

[英]Set bash environment variable from python script

我正在运行4个Python脚本,简而言之,这些脚本应该设置环境变量。

重点是,使用os.environ['TEST'] (例如)仅针对运行它的Python脚本的范围设置它。

$ python test.py arg1
$ echo $TEST    < ------------

这将返回空白。 而从Python脚本中进行打印会在TEST中显示一个值

os.environ.get('TEST')

如何从python脚本设置环境变量?

作为另一种解决方法,(另一个问题)一个人如何在Python脚本之间共享数据?

您似乎对流程和环境的工作方式有完全的误解。

$ python test.py arg1
$ echo $TEST

第一行将创建一个进程,它是与Shell本身完全独立的进程。 尽管环境变量的值可能是从父流程的环境继承的,但是新流程具有自己的环境。

到第二行执行时,第一行的过程和环境甚至不复存在! 您无法从Python进程中轻松修改Shell进程的环境。

作为另一种解决方法,(另一个问题)一个人如何在python脚本之间共享数据?

不通过环境-Python进程完成后,即退出脚本时,其环境已被破坏。 “替代问题”也许太笼统了,因为有许多方法可以在Python进程之间共享数据,但是我建议您首先从文件中读取/写入数据。

不能为父(或祖先)流程环境设置环境变量。

一些bash脚本通过执行source来解决此要求(它在当前bash中运行它们,而不是生成bash进程),但是显然这永远不会与python脚本一起使用,因为您无法执行python脚本在bash进程本身内部,而不会产生python子进程。

其他一些程序(例如ssh-agent )将必需的分配输出到标准输出,以使它们的输出可以通过bash中的eval运行; 尽管需要调用者的配合(例如,运行eval $(ssh-agent)而不只是ssh-agent ),但此方法有效。

关于您的子问题-有多种在进程之间共享数据的方法:命令行参数,管道,命名管道,文件,套接字,信号,数据库(SQL和no-SQL),其他服务(Web或其他)。 ..如果您要求我们选择最合适的方案,则需要详细说明您的方案。 但这真的是一个新问题。

环境块是每个进程唯一的内存区域。 内容由启动过程的方式确定。 默认情况下,父进程的环境块被复制到子进程。 孩子可以自由更改自己的环境块,但不能更改其父母的环境。

最重要的是,环境值只能沿一个方向传递,即从父级到子级。

这适用于所有进程,无论使用何种语言编写程序。

“使用os.environ ['TEST'](例如)仅针对运行它的Python脚本的范围设置它。” -正确

“如何从python脚本中设置环境变量?” -理论上,可能必须用C编写的调试器可以附加到进程并更改内存块。 这是困难的,危险的(可能会覆盖错误的内存),巨大的安全风险和维护噩梦。 你真的不想去那里。

在流程之间共享数据是一个广泛的问题,使用哪种语言并不重要-原理是相同的。

它取决于数据的类型(二进制或文本),数据量(几个字节或兆字节),数据是否双向传输(可能需要同步),数据是否必须持久(文件)。或可能需要数据库),可能还有一百万我没有想到的其他事情。

您需要更具体地说明在什么情况下共享哪些数据,包括由谁进行写作和由谁进行阅读。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM