Python 如何使用fabric2在本地主机上启动命令?
这是我的剧本:Python 如何使用fabric2在本地主机上启动命令?,python,python-3.x,fabric,Python,Python 3.x,Fabric,这是我的剧本: from fabric2 import Connection c = Connection('127.0.0.1') with c.cd('/home/bussiere/'): c.run('ls -l') 但我有一个错误: paramiko.ssh_exception.AuthenticationException: Authentication failed. 那么如何在本地主机上运行命令呢?在Fabric2中,连接对象有一个local()方法。 请查看此对象的
from fabric2 import Connection
c = Connection('127.0.0.1')
with c.cd('/home/bussiere/'):
c.run('ls -l')
但我有一个错误:
paramiko.ssh_exception.AuthenticationException: Authentication failed.
那么如何在本地主机上运行命令呢?在Fabric2中,
连接
对象有一个local()
方法。
请查看此对象的文档。在Fabric2中,
连接
对象具有一个local()
方法。
请查看此对象的文档。自2020年7月起,使用fabric2时,如果默认情况下未将参数传递给任务装饰器,则您在本地计算机上 例如,以下内容将在本地计算机(localhost)上运行: 示例1:仅在本地
#蟒蛇3
#fabfile.py
从结构导入任务,连接
c=连接('远程_user@remote_server.com')
@任务
def详细信息列表(c):
c、 run('ls-l')#将在本地服务器上运行,因为decorator@task不包含hosts参数
然后你可以在你的机器上用
fab DetailList
如果您想混合应该在远程服务器和本地服务器上运行的代码,您应该将连接作为参数传递给@task decorator
示例2:本地和远程(但功能不同)
#蟒蛇3
#fabfile.py
#进口
从结构导入任务,连接
#变数
主机列表=['user@yourserver.com“]#您应该已经配置了ssh访问权限
c=连接(主机列表[0])
工作目录='/var/www/yourproject'
#将在远程计算机上运行
@任务(主机=主机列表)
def更新(c):
c、 run('sudo apt get update')#将在远程服务器上运行,因为主机被传递给任务装饰器
c、 run(f'cd{working_dir}&&git pull')#将在远程服务器上运行,因为主机被传递给任务装饰器
c、 run('sudo service apache2 restart')#将在远程服务器上运行,因为主机被传递给任务装饰器
#将在本地上运行,因为您未指定主机
@任务
def详细信息列表(c):
c、 run('ls-l')###将在本地服务器上运行,因为主机未传递给任务装饰器
正如Ismaïl所提到的,在传递hosts参数时也可以使用“local”方法,“local”方法将在localhost上运行,尽管您已将host参数指定给任务装饰器。请注意,如果未指定任何主机参数,则不能使用“local”方法,但请改用run,如示例1和2中所示
示例3:在远程服务器和本地服务器上都使用,但在相同的函数下,请注意,我们没有修饰在UpdateAndRestart函数中调用的函数
#蟒蛇3
#fabfile.py
#进口
从结构导入任务,连接
#变数
list_of_hosts=['www.yourserver.com']#您应该已经配置了ssh访问
c=连接(主机列表[0])
工作目录='/var/www/yourproject'
def更新服务器(c):
c、 run('sudo apt get update')#将在远程服务器上运行,因为主机被传递给任务装饰器
c、 local(“echo远程服务器现在已更新”)#将在本地服务器上运行,因为在将主机传递给decorator时使用了local方法
def PullFromGit(c):
c、 run(f'cd{working_dir}&&git pull')#将在远程服务器上运行,因为主机被传递给任务装饰器
c、 local('echo Git repo now pull')#将在本地服务器上运行,因为在将主机传递给decorator时使用了local方法
def重新启动服务器(c):
c、 run('sudo service apache2 restart')#将在远程服务器上运行,因为主机被传递给任务装饰器
c、 local(“echo Apache2现在已重新启动”)#将在本地服务器上运行,因为在将主机传递给装饰器时使用了本地方法
@任务(主机=主机列表)
def更新和启动(c):
更新服务器(c)
PullFromGit(c)
重启服务器(c)
c、 local(“echo you have updated,pull and restarted Apache2”)#将在本地服务器上运行,因为在将主机传递给decorator时使用了本地方法
您将能够使用以下各项运行整个堆栈:
fab UpdateAndRestart
从2020年7月起,使用fabric2,如果默认情况下您没有将参数传递给任务装饰器,则您在本地计算机上 例如,以下内容将在本地计算机(localhost)上运行: 示例1:仅在本地
#蟒蛇3
#fabfile.py
从结构导入任务,连接
c=连接('远程_user@remote_server.com')
@任务
def详细信息列表(c):
c、 run('ls-l')#将在本地服务器上运行,因为decorator@task不包含hosts参数
然后你可以在你的机器上用
fab DetailList
如果您想混合应该在远程服务器和本地服务器上运行的代码,您应该将连接作为参数传递给@task decorator
示例2:本地和远程(但功能不同)
#蟒蛇3
#fabfile.py
#进口
从结构导入任务,连接
#变数
主机列表=['user@yourserver.com“]#您应该已经配置了ssh访问权限
c=连接(主机列表[0])
工作目录='/var/www/yourproject'
#将在远程计算机上运行
@任务(主机=主机列表)
def更新(c):
c、 run('sudo apt get update')#将在远程服务器上运行,因为主机被传递给任务装饰器
c、 run(f'cd{working_dir}&&git pull')#将在远程服务器上运行,因为主机被传递给任务装饰器
c、 run('sudo service apache2 restart')#将在远程服务器上运行,因为主机被传递给任务装饰器
#将在本地上运行,因为您未指定主机
@任务
def详细信息列表(c):
c、 run('ls-l')###将在本地服务器上运行,因为主机未传递给任务装饰器
正如Ismaïl所提到的,在传递hosts参数时也可以使用“local”方法,“local”方法将在localhost上运行,尽管您已将host参数指定给任务装饰器。请注意,如果未指定任何主机参数,则不能使用“local”方法,但请使用run,如图所示