通过名称调用它来执行独立的结构脚本,不带.py扩展名

时间:2015-02-15 21:19:48

标签: python fabric

我有一个名为fwp.py的结构脚本,我运行时没有通过使用以下方式调用它:

if __name__ == '__main__':
    # imports for standalone mode only
    import sys
    import fabric.main

    fabric.main.main(fabfile_locations=[__file__])

然后必须通过调用fwp.py来调用脚本。我想将其重命名为fwp,以便将其称为fwp。但这样做会导致

Fatal error: Couldn't find any fabfiles!

有没有办法让Python / Fabric导入这个文件,尽管缺少“.py”扩展名?

重申并澄清:

我没有使用“fab”实用程序(例如fab task task:parameter);只需将我的脚本调用为fwp.py task task:parameter,并希望能够将其称为fwp task task:parameter

更新

这不是this question的重复。问题不是“如何运行独立的结构脚本?”,而是“如何使用没有.py”的扩展脚本。

1 个答案:

答案 0 :(得分:1)

编辑:原始答案已更正

fabric.main.main()函数会自动将.py添加到提供的fabfile位置的末尾(请参阅https://github.com/fabric/fabric/blob/master/fabric/main.py#L93)。不幸的是,该函数还使用Python的导入机制来加载文件,因此它必须看起来像模块或包。如果没有重新实现fabric.main模块的大部分内容,我认为这是不可能的。您可以尝试对fabric.main.find_fabfilesfabric.main.load_fabfiles进行猴子修补,以使其正常工作。

原创回答(错误)

我可以在新安装的布料包装上保持不变。以下将使用文件名fwp和版本1.10.1,Python2.7的可执行权限执行。我会尝试升级面料。

#!/usr/bin/env python

from fabric.api import *
import fabric.main

def do():
    local('echo "Hello World"')

if __name__ == '__main__':
    fabric.main.main(fabfile_locations=[__file__])

输出:

$ ./fwp do
Hello World

Done