使用Python设置环境
我们的环境有一个shell脚本来设置工作区<代码>设置。sh如下所示:使用Python设置环境,python,bash,shell,Python,Bash,Shell,我们的环境有一个shell脚本来设置工作区设置。sh如下所示: export BASE_DIR=$PWD export PATH=$BASE_DIR/bin export THIS_VARIABLE=THAT_VALUE 用户执行以下操作: % . setup.sh 我们的一些用户正在寻找csh版本,这意味着有两个安装文件 我想知道是否有一种方法可以用一个普通的python文件来完成这项工作。在本文中,Kenneth Reitz建议在项目中使用setup.py文件,但我不确定Pyth
export BASE_DIR=$PWD
export PATH=$BASE_DIR/bin
export THIS_VARIABLE=THAT_VALUE
用户执行以下操作:
% . setup.sh
我们的一些用户正在寻找csh
版本,这意味着有两个安装文件
我想知道是否有一种方法可以用一个普通的python文件来完成这项工作。在本文中,Kenneth Reitz建议在项目中使用setup.py
文件,但我不确定Python是否可以像上面那样在shell中设置环境变量
我可以用做同样事情的python脚本替换这个shell脚本吗?我不知道怎么做
(还有其他一些问题提出了更广泛的问题,有很多评论,但这一个问题有一个直接的问题和一个直接的答案。)不,Python(或者通常是类Unix平台上的任何进程)不能更改其父环境
一个常见的解决方案是让脚本以适合用户shell的格式打印输出。例如,ssh代理
将打印出sh
-与-s
兼容的全局分配,或者当它看到正在从Bourne兼容的shell调用它时;如果从csh
或tcsh
调用,或使用-c
显式调用,则为csh
语法
兼容shell中的通常调用是$(eval ssh agent)
——因此程序打印的文本由用户调用此命令的shell进行计算
eval
是一个众所周知的安全风险,因此您希望使此代码非常容易检查,即使对于不太会讲Python(或shell,或其他任何语言)的人也是如此
如果您对直接支持Csh用户持怀疑态度,那么您可以说服他们在Bourne兼容的shell中运行您的sh
-兼容脚本,然后运行exec Csh
,以获得他们首选的交互环境。这还避免了在支持Csh、Fish、rc
、Powershell等用户时遇到越来越多的小维护难题的危险。不,Python(或Unix类平台上的任何进程)无法更改其父环境
一个常见的解决方案是让脚本以适合用户shell的格式打印输出。例如,ssh代理
将打印出sh
-与-s
兼容的全局分配,或者当它看到正在从Bourne兼容的shell调用它时;如果从csh
或tcsh
调用,或使用-c
显式调用,则为csh
语法
兼容shell中的通常调用是$(eval ssh agent)
——因此程序打印的文本由用户调用此命令的shell进行计算
eval
是一个众所周知的安全风险,因此您希望使此代码非常容易检查,即使对于不太会讲Python(或shell,或其他任何语言)的人也是如此
如果您对直接支持Csh用户持怀疑态度,那么您可以说服他们在Bourne兼容的shell中运行您的sh
-兼容脚本,然后运行exec Csh
,以获得他们首选的交互环境。这也避免了为支持Csh、Fish、rc
、Powershell等用户而面临越来越多的小维护挑战的滑坡。可能重复的