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