根据我的阅读,Python实例中对环境变量的任何更改仅在该实例中可用,并在实例关闭后消失.是否有任何方法可以通过将它们提交给系统来使它们坚持下去?
我需要这样做的原因是因为在我工作的工作室,像Maya这样的工具在很大程度上依赖于环境变量来配置跨多个平台的路径.
我的测试代码是
import os
os.environ['FAKE'] = 'C:\\'
Run Code Online (Sandbox Code Playgroud)
打开另一个Python实例并请求os.environ['FAKE']产生一个KeyError.
注意:可移植性将是一个问题,但我正在编写的小API将能够检查操作系统版本并在必要时触发不同的命令.
也就是说,我已经走了使用Windows注册表技术的路线,只会编写替代方法,在其他平台上调用shell脚本,因为它们成为需求.
Python对环境变量的访问并不能准确反映操作系统对进程环境的看法.
在特定情况下,os.getenv和os.environ没有按预期运行.
有没有办法正确地获得正在运行的进程环境?
为了证明我的意思,拿两个大致相同的程序(第一个在C中,另一个在python中):
#include <stdio.h>
#include <stdlib.h>
#include <unistd.h>
int main(int argc, char *argv[]){
char *env;
for(;;){
env = getenv("SOME_VARIABLE");
if(env)
puts(env);
sleep(5);
}
}
Run Code Online (Sandbox Code Playgroud)
import os
import time
while True:
env = os.getenv("SOME_VARIABLE")
if env is not None:
print env
time.sleep(5)
Run Code Online (Sandbox Code Playgroud)
现在,如果我们运行C程序并使用gdb附加到正在运行的进程并通过执行以下操作强制更改引擎环境:
(gdb) print setenv("SOME_VARIABLE", "my value", 1)
[Switching to Thread -1208600896 (LWP 16163)]
$1 = 0
(gdb) print (char *)getenv("SOME_VARIABLE")
$2 = 0x8293126 "my value"
Run Code Online (Sandbox Code Playgroud)
那么前面提到的C程序将每5秒开始喷出一次"我的价值".然而,前面提到的python程序不会.
在这种情况下,有没有办法让python程序像C程序一样运行?
(是的,我意识到这是一个在运行过程中执行的非常模糊且可能具有破坏性的操作)
此外,我目前正在使用python 2.4,这可能已在更高版本的python中修复.
我正在尝试从 Python 中修改父 shell 上的环境变量。到目前为止我尝试过的没有奏效:
~ $ export TESTING=test
~ $ echo $TESTING
test
~ $
~ $
~ $ python
Python 2.7.10 (default, Jun 1 2015, 18:05:38)
[GCC 4.9.2] on cygwin
Type "help", "copyright", "credits" or "license" for more information.
>>> import os
>>> os.environ['TESTING']
'test'
>>> os.environ['TESTING'] = 'changed'
>>> os.environ['TESTING']
'changed'
>>> quit()
~ $
~ $
~ $ echo $TESTING
test
Run Code Online (Sandbox Code Playgroud)
这就是我所能想到的。可以做到吗?如何在 Python 中设置父 shell 的环境变量?
VERSION如何从 python 脚本中获取 gitlab-ci 环境变量值 -get_version.py对于可在 Windows 和 Linux 操作系统上运行的 gitlab-runners?我需要一些通用的解决方案,以便它可以在两种操作系统上运行。
这是我的.gitlab-ci.yml:
stages:
- versioning
variables:
VERSION: ""
versioning:
stage: versioning
script:
- echo "[versioning] ..."
- python ./ci-cd_scripts/get_version.py
- echo $VERSION
Run Code Online (Sandbox Code Playgroud)
这是我的./ci-cd_scripts/get_version.py:
import os
refName = os.environ.get("CI_COMMIT_REF_NAME")
piplineID = os.environ.get("CI_PIPELINE_ID")
relVersion = refName + ".0." + piplineID
version = relVersion.replace("rel.", "")
print("current version is", version)
Run Code Online (Sandbox Code Playgroud)
是否可以使用 Python 3.5 在 Windows 和 Linux 中创建和更新环境变量以使其持久化?
目前我使用这个:
import os
os.environ["MY_VARIABLE"] = "TRUE"
Run Code Online (Sandbox Code Playgroud)
然而,这似乎不会持久地“存储”环境变量。