Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/303.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 如何使用fabric2在本地主机上启动命令?_Python_Python 3.x_Fabric - Fatal编程技术网

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,如图所示