Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/ssh/2.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 结构-测试到多个主机的SSH连接_Python_Ssh_Fabric - Fatal编程技术网

Python 结构-测试到多个主机的SSH连接

Python 结构-测试到多个主机的SSH连接,python,ssh,fabric,Python,Ssh,Fabric,我有一个Python脚本,它使用fabric库测试到多个主机的SSH连接。我想在一个列表中收集所有结果: ... import fabric from fabric.api import * results = [] @parallel def test_connection(): global results try: run('ls') results += "%s: SUCCESS" % env.host except Exception as e:

我有一个Python脚本,它使用fabric库测试到多个主机的SSH连接。我想在一个列表中收集所有结果:

...
import fabric
from fabric.api import *

results = []

@parallel
def test_connection():
  global results
  try:
    run('ls')
    results += "%s: SUCCESS" % env.host
  except Exception as e:
    results += "%s: FAILURE. Exception: %e" % (env.host, e)

if __name__ == '__main__':
    tasks.execute(test_connection)
    print results
当我执行脚本时,我得到以下结果:

Traceback (most recent call last):
  File "./test_ssh.py", line 99, in <module>
    tasks.execute(test_connection)
  File "/Library/Python/2.7/site-packages/fabric/tasks.py", line 387, in execute
    multiprocessing
  File "/Library/Python/2.7/site-packages/fabric/tasks.py", line 277, in _execute
    return task.run(*args, **kwargs)
  File "/Library/Python/2.7/site-packages/fabric/tasks.py", line 174, in run
    return self.wrapped(*args, **kwargs)
  File "./test_ssh.py", line 96, in test_connection
    results += "%s: FAILURE. Exception: %e" % (env.host, e)
UnboundLocalError: local variable 'results' referenced before assignment
回溯(最近一次呼叫最后一次):
文件“/test_ssh.py”,第99行,在
任务。执行(测试\u连接)
文件“/Library/Python/2.7/site packages/fabric/tasks.py”,第387行,在execute中
多处理
文件“/Library/Python/2.7/site packages/fabric/tasks.py”,第277行,在
返回任务。运行(*args,**kwargs)
文件“/Library/Python/2.7/site packages/fabric/tasks.py”,第174行,正在运行
返回自包装(*args,**kwargs)
文件“/test\u ssh.py”,第96行,在test\u连接中
结果+=%s:失败。异常:%e“%(环境主机,e)
UnboundLocalError:赋值前引用的局部变量“results”
我认为这是因为
test\u connection
运行它自己的上下文,所以它无法访问
结果


还有其他方法可以收集我的结果吗?

诀窍是,您可以实际返回并行执行的结果:

@parallel
def test_connection():
  try:
    run('ls')
    return True
  except Exception:
    return False
现在,当您调用任务时,您将获得:

result = execute(test_connection)
results = [ ('HOST %s succeeded' % key) if value else ('HOST %s failed' % key) for key, value in result.items() ]

您可能希望将
附加到
结果
,而不是
+=
<代码>结果+='test'结果为
['t','e','s','t']
。也许你应该在没有并行代码的情况下尝试一下