致命:目标路径'myproject'已经存在且不是空目录

时间:2015-07-08 18:23:12

标签: python git ssh subprocess

有趣的是,当我尝试使用bash shell克隆对象时

ssh -t -i ~/.ssh/security.pem root@xx.xxx.xx.xx 'rm -rf myproject && git clon -b mybranch https://github.com/myproject.git'

一切都很美妙。

但是当我尝试从python子进程调用中执行此操作时,如

subprocess.check_call("ssh -t -i ~/.ssh/security.pem root@xx.xxx.xx.xx 'rm -rf myproject && git clone -b mybranch https://github.com/myproject.git'", shell=True)

然后我会收到以下错误:

致命:目标路径'myproject'已经存在且不是空目录 追溯(最近的呼叫最后):
  文件“”,第1行,在中   在check_call中文件“C:\ Python27 \ lib \ subprocess.py”,第540行     引发CalledProcessError(retcode,cmd)

2 个答案:

答案 0 :(得分:-1)

如果您正在执行长bash命令,则必须将其参数拆分为列表。就像我想使用子进程库运行“ls -a”一样,我必须这样做:

subprocess.call(["ls","-a"])

查看文档以供参考:https://docs.python.org/2/library/subprocess.html

但是,如果您仍然无法删除该文件夹,shutil.rmtree()将使用shutil库。

答案 1 :(得分:-1)

以下是我发现的:shell = True。出于某种原因,python将执行第一个shell命令' rm -rf myproject'在远程机器中然后关闭SSH连接,最后执行第二个命令' git clone -b branch https://github.com/myproject.git'在本地机器上。在我的情况下,我有相同的git存储库' myproject'在我的本地目录中,所以git尝试克隆我的本地目录并抱怨它。更改为shell = False后,或将其保留,然后一切正常。不确定shell值为什么会导致这种情况?!