如何从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脚本时,仍然会出现相同的错误。你能更详细地解释一下你的建议吗?你能解决这个问题吗?