我正在尝试为基于Django的项目创建自动部署脚本。基本上一切正常,直到我试图压缩我的项目目录的步骤。 Fabric似乎执行命令,它不会返回任何错误。
以下是引起问题的一行:
local('git archive -v --format=tar HEAD | gzip > test.tar.gz')
我正在使用Windows和Cygwin来访问Unix命令。我尝试在项目的根目录(来自Cygwin)中执行相同的命令,并成功创建test.tar.gz
(120 MB)。我还从项目的根目录(使用Cygwin)执行Fabric脚本,执行后我看到test.tar.gz
被创建,但它只是空的(20字节)。
编辑:试图在我的同事Linux机器上运行相同的脚本,它运行得很好:S
编辑2:我试图在fabfile中执行而不是本地的subprocess.Popen命令,它正确地执行了我需要的东西..现在有一个问题,为什么在本地方法中使用相同的命令(在operations.py源中找到)不执行任务?感谢任何帮助。
答案 0 :(得分:0)
这里的问题是Cygwin's environment variables对local()
调用的系统shell不可用,
local只是一个关于内置使用的便利包装器 Python子进程模块,shell = True激活。如果你需要这样做 任何特殊情况,请考虑直接使用子进程模块。
这也是他们提供run()
的原因。这使您能够在远程主机上运行shell命令。你可以(理论上)创建一个bash文件,调用Cygwin然后调用你的git archive
命令。我会不推荐这个,here就是原因。
如果您只需要调用git命令的能力,我强烈建议您使用msysGit。安装完成后,将PATH
环境变量设置为指向msysgit bin所在的位置,以便从CMD调用git命令。