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

dan*_*nny 15 python fabric

我正在使用Fabric 1.01,在我的fabfile中我正在使用put命令.这条线是:

put('file.tar.gz', '~/file.tar.gz')
Run Code Online (Sandbox Code Playgroud)

服务器位于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
Run Code Online (Sandbox Code Playgroud)

谁知道这是从哪里来的?该文件肯定存在于我的本地机器上,我也尝试将第二个put()参数作为'/ server/path/to /',我尝试使用该文件的绝对路径进行第一次put()争论,一切都无济于事.

Art*_*are 20

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

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

Underlying exception:
    No such file
Run Code Online (Sandbox Code Playgroud)

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

在我的特殊情况下,问题是我提供了一条路径,我打算在远程Linux系统上将其解释为绝对路径,但是我没有提到最初的路径/.


dan*_*nny 10

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

put('file.tar.gz', '~/file.tar.gz')
Run Code Online (Sandbox Code Playgroud)

显然Fabric使用我本地机器的主目录而不是服务器进行了波浪插值.用服务器上的显式路径替换波浪号后,它工作正常.

  • 文档说波浪号应该是有效的,但是Fabric中的[bug](https://github.com/fabric/fabric/issues/323)没有正确解释它. (4认同)