Fabric put命令给出致命错误:'No such file'异常

时间:2011-06-14 23:27:55

标签: python fabric

我正在使用Fabric 1.01,在我的fabfile中,我正在使用put命令。该行是:

put('file.tar.gz', '~/file.tar.gz')

服务器位于env.hosts列表中。 file.tar.gz与fabfile位于同一目录中,我正在运行此目录中的代码。

当我运行代码时,它就会运行这个put命令。在输出失败之前是:

[uname@site.com] put: file.tar.gz -> ~/file.tar.gz

Fatal error: put() encountered an exception while uploading 'file.tar.gz'

Underlying exception message:
    No such file

任何人都知道这是从哪里来的?该文件肯定存在于我的本地机器上,我也尝试了第二个put()参数只是'/ server / path / to /'而且我尝试使用该文件的绝对路径进行第一次put()争论,一切都没有用。

2 个答案:

答案 0 :(得分:20)

我发现此错误消息颇具误导性。打印的消息是:

Fatal error: put() encountered an exception while uploading 'local/path'

Underlying exception:
    No such file

这导致您认为问题在于Python无法在local/path看到该文件。我不确定从来没有这种情况,但在原始问题和我的情况下,问题都与此无关,而问题是 远程文件夹无法找到。由于此命令不会自动在其找不到的路径中创建任何文件夹,因此当它无法找到远程路径中的任何远程文件夹时,它将失败。

在我的特定情况下,问题在于我提供了一条路径,我打算在远程Linux系统上将其解释为绝对路径,但是我从最初的/开始。

答案 1 :(得分:10)

哎呀,在匿名提问时我很懒。我的代码包含代字号:

put('file.tar.gz', '~/file.tar.gz')

显然,Fabric使用本地计算机的主目录而非服务器进行了波浪插值。用服务器上的显式路径替换波浪号后,它可以正常工作。