我有一个名为update.sh
的最简单脚本。
#!/bin/sh
cd /home/pi/circulation_of_circuits
git pull
在终端中使用./update.sh
调用时,我会得到一个已经是最新的的提示或者按预期更新文件。
我还有一个Python脚本,里面包含:
subprocess.call(['./update.sh'])
当那个脚本调用相同的脚本时,我会得到以下错误提示:
权限被拒绝(publickey)。 fatal: Could not read from remote repository。
请确保您拥有正确的访问权限和存储库存在。
(我使用SSH)。
----------------- 更新 --------------------
有人替我看了看:
好的,有些进展。当我启动你的镜像时,我无法在你的仓库目录下运行git pull命令,bash脚本也失败了。似乎是因为bitbucket存储库是私有的,需要进行身份验证才能pull(我使用的是公共存储库,所以我没有问题)。显然,git在您第一次输入后就会记住这一点,bash以某种方式欺骗git,使其认为是您随后输入该命令,但从python运行它并不相同。
我不是git专家,但肯定有一些方法可以设置这个,使得python可以提供身份验证。
cmd = ['/home/pi/circulation_of_circuits/update.sh'] process = subprocess.Popen(cmd, shell=True, stdout=subprocess.PIPE) process.wait()
- clankill3ros.geteuid()
返回 0,所以应该没问题。 - clankill3rsubprocess.call(['sudo','./update.sh'])
但是这并没有改变任何事情。 - clankill3rcmd=['sudo', '-u', 'yourusername', 'path to your bash', '/home/pi/circulation_of_circuits/update.sh']
,看看是否有所帮助?这将使用您自己的用户权限运行脚本,而不是sudo的权限。正如kennytm的评论所述,您不应该以root身份运行以执行git pull。 - Montmons