通过按名称调用它来执行独立的结构脚本,不带 .py 扩展名
executing standalone fabric script by calling it by its name, without the .py extension
我有一个名为 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
。但这样做会导致
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 的副本。问题不是 "How to run a stand-alone fabric script?",而是 "How to do so, while having a script without a .py" 扩展。
编辑:已更正原始答案
fabric.main.main()
函数自动将 .py
添加到提供的 fabfile 位置的末尾(参见 https://github.com/fabric/fabric/blob/master/fabric/main.py#L93)。不幸的是,该函数还使用 Python 的导入机制来加载文件,因此它必须看起来像一个模块或包。如果不重新实现 fabric.main
模块的大部分内容,我认为这是不可能的。您可以尝试对 fabric.main.find_fabfiles
和 fabric.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
我有一个名为 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
。但这样做会导致
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 的副本。问题不是 "How to run a stand-alone fabric script?",而是 "How to do so, while having a script without a .py" 扩展。
编辑:已更正原始答案
fabric.main.main()
函数自动将 .py
添加到提供的 fabfile 位置的末尾(参见 https://github.com/fabric/fabric/blob/master/fabric/main.py#L93)。不幸的是,该函数还使用 Python 的导入机制来加载文件,因此它必须看起来像一个模块或包。如果不重新实现 fabric.main
模块的大部分内容,我认为这是不可能的。您可以尝试对 fabric.main.find_fabfiles
和 fabric.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