【发布时间】:2017-07-25 16:35:30
【问题描述】:
我有一个最简单的脚本,叫做update.sh
#!/bin/sh
cd /home/pi/circulation_of_circuits
git pull
当我从终端使用./update.sh 调用它时,我得到一个已经是最新的,或者它会像预期的那样更新文件。
我还有一个 python 脚本,里面的 scipt 是:
subprocess.call(['./update.sh'])
当调用相同的脚本时,我得到:
权限被拒绝(公钥)。 致命:无法从远程存储库读取。
请确保您拥有正确的访问权限 并且存储库存在。
(我使用 SSH)。
-----------------更新--------
别人找过我:
好的,所以有些进展。当我启动你的图像时,我无法运行 git pull in 您的 repo 目录和 bash 脚本也失败了。好像是 因为 bitbucket 存储库是私有的并且需要身份验证 对于拉(我使用的是公开的,所以这就是为什么我没有 问题)。大概 git 在你第一次输入之后会记住这一点 时间,bash 以某种方式欺骗 git 认为是你在输入 随后的命令,但从 python 运行它是不一样的。
我不是 git 专家,但必须有某种设置方法 python可以提供认证。
【问题讨论】:
-
这是否解决了您的问题(通过
shell=true标志):stackoverflow.com/a/325474/608259 -
不,以防万一我这样称呼它
cmd = ['/home/pi/circulation_of_circuits/update.sh'] process = subprocess.Popen(cmd, shell=True, stdout=subprocess.PIPE) process.wait() -
如果有人想知道,
os.geteuid()会给出一个 0,这样应该很好。 -
Permission denied (publickey).表明你的 ssh 配置有问题,用不同的用户运行 python 脚本? -
也许您可以尝试
cmd=['sudo', '-u', 'yourusername', 'path to your bash', '/home/pi/circulation_of_circuits/update.sh']之类的方法,看看是否有帮助?这将使用您自己的用户权限而不是 sudo 运行脚本,因为 kennytm 的评论指出您应该不以 root 身份运行来执行 git pull。