如何从python脚本执行一个文件?

如何从python脚本执行一个文件?,python,fabric,Python,Fabric,我有一个文件,内容如下: [root@ip-10-10-20-82 bakery]# cat fabfile.py from fabric.api import run def deploy(): run('wget -P /tmp https://s3.amazonaws.com/LinuxBakery/httpd-2.2.26-1.1.amzn1.x86_64.rpm') run('sudo yum localinstall /tmp/httpd-2.2.26

我有一个文件,内容如下:

[root@ip-10-10-20-82 bakery]# cat fabfile.py
from fabric.api import run
def deploy():
        run('wget -P /tmp https://s3.amazonaws.com/LinuxBakery/httpd-2.2.26-1.1.amzn1.x86_64.rpm')
        run('sudo yum localinstall /tmp/httpd-2.2.26-1.1.amzn1.x86_64.rpm')
当从命令行运行fabfile时,我可以成功执行该文件,如下所示:

fab -f fabfile.py -u ec2-user -i id_rsa -H 10.10.15.242 deploy
问题是,当我在Python脚本中运行它时,它不起作用。以下是在我的脚本中运行的方式:

import subprocess
subprocess.call(['fab', '-f', '/home/myhome/scripts/bakery/fabfile.py', '-u ec2-user', '-i', 'id_rsa', '-H', bakery_internalip, 'deploy'])
这就是我得到的错误:

Fatal error: Fabfile didn't contain any commands!
Aborting.

我不明白为什么会出现此错误。

更改fabfile.py并添加这些更改

@task
def deploy(): 
    ... rest of the code

if __name__ == "__main__":
    local('fab -f /path/fabfile.py deploy')

然后用python运行它

对不起,我不理解你的建议。我将我的fabfile.py更改为这样:
[root@ip-10-10-20-82 bakery]#cat fabfile.py from fabric.api import run@task def deploy():run('wget-P/tmphttps://s3.amazonaws.com/LinuxBakery/httpd-2.2.26-1.1.amzn1.x86_64.rpm如果uuu name_uuu==“uuuuu main”,则运行('sudo-yum-localinstall/tmp/httpd-2.2.26-1.1.amzn1.x86_64.rpm'):local('fab-f/home/ralawson/scripts/bakery/fabfile.py deploy')
。但是,当我运行Python脚本时,仍然会出现相同的错误。你能更详细地解释一下你的建议吗?你能解决这个问题吗?