我正在使用Paramiko的SFTPClient class编写Ansible模块.我有以下代码片段

import paramiko
from ansible.module_utils.basic import *

def get_sftp_client(host, port, user, password):
  # Open a transport
  transport = paramiko.Transport((host,port))
  # Auth    
  transport.connect(None,user,password)
  # Get a client object
  sftp = paramiko.SFTPClient.from_transport(transport)
  return (transport, sftp)

def transfer_file(params):
  has_changed = False
  meta = {"upload": "not yet implemented"}
  user = params['user']
  password = params['password']
  host = params['host']
  port = params['port']
  direction = params['direction']
  src = params['src']
  dest = params['dest']

  transport, sftp = get_sftp_client(host, port, user, password)

  stdout = None
  stderr = None
  if direction == 'download':
    sftp.get(src, dest)
  else:
    sftp.put(src, dest)

  meta = {
    "source": src,
    "destination": dest,
    "direction": direction,
    "stdout": stdout,
    "stderr": stderr
  }

  # Close
  if sftp: sftp.close()
  if transport: transport.close()
  return (has_changed, meta)

def main():
  fields = {
    "user": {"required": True, "type": "str"},
    "password": {"required": True, "type": "str", "no_log": True},
    "host": {"required": True, "type": "str"},
    "port": {"type": "int", "default": 22},
    "direction": {
      "type": "str",
      "choices": ["upload", "download"],
      "default": "upload",
    },
    "src": {"type": "path", "required": True},
    "dest": {"type": "path", "required": True},
  }

  module = AnsibleModule(argument_spec=fields)

  # Do the work
  has_changed, result = transfer_file(module.params)

  module.exit_json(changed=has_changed, meta=result)

if __name__ == '__main__':
    main()

如何捕获get()put()函数的通过/失败结果?文档没有提到get()的返回值,而put()的返回值是SFTPAttribute类,这是我不需要的.我只想知道事务是通过了还是失败了,如果失败了,就会得到错误.谢谢.

推荐答案

Paramiko SFTPClient.put.get在出错时抛出异常.

如果他们没有抛出,那么转会成功.

Python-3.x相关问答推荐

使用Python装载. iso文件

新行是pandas数据帧中旧行的组合

在特定条件下从 DataFrame 中提取特定组

通过 Pandas 通过用户定义函数重命名数据框列

如何在类中的函数(以 self 作为第一个参数)中使用递归

移动所有列的数据帧值以使其单调递增

在不改变 python 中原始数组顺序的情况下,对多维字符串数组进行降序排序?

如何键入提示函数,在 Python 中通过类decorator 添加到类中

Pandas 在每组两个条件之间获得时间增量

协议不支持地址系列在将 Scapy L3socket 与 WSL 一起使用时

获取以特定字母开头的姓氏

FastAPI - 调用 API 时设置 response_model_exclude

在python中循环处理时并行写入文件

Python:如何判断一个项目是否被添加到一个集合中,没有 2x(hash,lookup)

理解 Keras 的 ImageDataGenerator 类中的 `width_shift_range` 和 `height_shift_range` 参数

__new__ 方法给出错误 object.__new__() 只接受一个参数(要实例化的类型)

为 Python 3 和 PyQt 构建可执行文件

Python3 - 如何从现有抽象类定义抽象子类?

如何在python中创建代码对象?

为什么变量 = 对象不像变量 = 数字那样工作