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

2024-04-24 00:46:22 发布

您现在位置:Python中文网/ 问答频道 /正文

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

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

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

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

^{pr2}$

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

重申并澄清:

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

更新

它不是this question的副本。问题不是“如何运行独立的结构脚本?”,但“如何在没有.py扩展名的脚本时这样做”。在


Tags: 方法namepyimport脚本fortaskif
1条回答
网友
1楼 · 发布于 2024-04-24 00:46:22

编辑:原始答案已更正

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__])

输出:

^{pr2}$

相关问题 更多 >