使用Python设置环境

时间:2018-03-15 13:15:05

标签: python bash shell

我们的环境有一个shell脚本来设置工作区域。 JsonUtility看起来像这样:

.FromJson<TypeOfTheClassImMappingTo>

用户执行以下操作:

myObject = JsonUtility.FromJson<MyClass>(json);

我们的一些用户正在寻找setup.sh版本,这意味着有两个设置文件。

我想知道是否有办法使用常见的python文件来完成这项工作。在[StackOverflow] Serialize and Deserialize Json and Json Array in Unity Kenneth Reitz建议在项目中使用 export BASE_DIR=$PWD export PATH=$BASE_DIR/bin export THIS_VARIABLE=THAT_VALUE 文件,但我不确定Python是否可以像在上面那样在shell中设置环境变量。

我可以用执行相同操作的python脚本替换此shell脚本吗?我不知道怎么做。

(还有其他一些问题可以通过许多评论更广泛地提出这个问题,但这个问题有直接的问题和直接的单一答案。)

1 个答案:

答案 0 :(得分:3)

不,Python(或类似Unix平台上的任何进程)都无法改变其父级环境。

一个常见的解决方案是让脚本以适合用户shell的格式打印输出。例如。 ssh-agent将打印sh - 与-s兼容的全局分配,或者当它看到从Bourne兼容的shell调用它时;如果从cshcsh调用或使用tcsh显式调用,则为-c语法。

sh - 兼容shell中的常规调用是$(eval ssh-agent) - 因此程序打印的文本由用户调用此命令的shell进行评估。

eval是一个众所周知的安全风险,所以即使对于那些不会说太多Python(或shell,或其他任何东西)的人来说,你也希望这个代码很容易被审查。 / p>

如果你是,咳嗽,对直接支持Csh用户持怀疑态度,也许你可以说服他们在兼容Bourne的shell中运行你的sh兼容脚本,然后{{ 1}}获得他们喜欢的互动环境。这也避免了为支持Csh,Fish,exec csh,Powershell等用户提供越来越少的维护挑战的滑坡。