subprocess.open执行shell脚本识为什么别不到git命令?

subprocess.open执行shell脚本识为什么别不到git命令?

有以下一段python的伪代码

cmd = "xxx.sh"

workdir="/xxx/xxx/xxx"

with open('./out.log', 'a') as log:

p = subprocess.Popen(cmd, shell=True, stdout=log, stderr=subprocess.STDOUT, cwd=workdir)

在这个xxx.sh文件里, 有如下一些脚本

...

git pull

npm run build

...

这种结果就是git命令识别不到, git: command not found, 但是npm命令可以执行成功

将其改为
/usr/local/git-2.31.1/bin/git pull
可以执行成功, git命令执行成功了

这是什么道理? 如何优雅解决

对python 不太熟悉


回答:

这个就是环境变量的问题,不是python的问题。

应该是因为git安装的位置不在:环境变量PATH所包含的目录中

是因为通过subprocess启动的程序,不会去加载.bashrc.profiles ... 这些shell的配置文件,所以PATH内容就是shell默认的环境变量。

通常都会包含这些目录:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin,如果执行文件不在这些目录里,执行的时候都会找不到。

所以有两个解决办法:
方法1: 在/usr/local/bin目录里,添加一个软链接 ln -s /path/to/git /usr/local/bin/git,这样git,就被包含在PATH目录里面了,这里/usr/local/bin换成其他的也可以。
方法2: 在脚本里面设置 PATH 环境变量,把git执行文件的所在路径加上去

以上是 subprocess.open执行shell脚本识为什么别不到git命令? 的全部内容, 来源链接: utcz.com/p/938689.html

回到顶部