- android - 多次调用 OnPrimaryClipChangedListener
- android - 无法更新 RecyclerView 中的 TextView 字段
- android.database.CursorIndexOutOfBoundsException : Index 0 requested, 光标大小为 0
- android - 使用 AppCompat 时,我们是否需要明确指定其 UI 组件(Spinner、EditText)颜色
为了方便起见,我编写了一个小包装类来登录远程主机,执行命令,结束检索数据:
def MySSHClient:
def connect(self, remoteHost, remotePort, userName, password):
self.__s = paramiko.SSHClient()
self.__s.load_system_host_keys()
self.__s.connect(remoteHost, remotePort, userName, password)
def exec_command(self, command):
bufsize = -1
chan = self.__s.get_transport().open_session()
chan.exec_command(command)
stdin = chan.makefile('wb', bufsize)
stdout = chan.makefile('r', bufsize)
stderr = chan.makefile_stderr('r', bufsize)
stdin.close()
exitcode = chan.recv_exit_status()
r = MySSHCommandResult(command, stdin, stdout, stderr, exitcode)
chan.close()
return r
def close(self):
self.__s.close()
此代码改编自原始的 paramiko python 实现。我刚刚添加了最后 5 行。
(仅供引用:MySSHCommandResult 在构造期间从 stdout 和 strerr 读取所有数据并将其存储以供进一步使用。)
MySSHClient 类在一个简单的 python 程序中使用:
....
exitCode = 0
s = None
try:
....
exitCode = 3
s = MySSHClient()
s.connect(host, port, login, password)
exitCode = 4
result = s.exec_command(myCommand)
exitCode = 5
if not result.isSuccess():
raise Exception("Failed to execute command!")
result.dump() # for current debugging purposes
exitCode = 0
except:
pass
if s is not None:
s.close()
sys.exit(exitCode)
(通过这些退出代码,Python 程序告诉调用者一切是否成功。如您所见,使用了各种退出代码,以便在失败时进行一些错误诊断。)
到目前为止一切顺利。基本上这是有效的。但我不明白的是,有时我的 python 程序会给出这样的额外输出:
Exception ignored in: <bound method BufferedFile.__del__ of <paramiko.ChannelFile from <paramiko.Channel 0 (closed) -> <paramiko.Transport at 0x74300588 (unconnected)>>>>
Traceback (most recent call last):
File "/usr/local/lib/python3.5/dist-packages/paramiko/file.py", line 61, in __del__
File "/usr/local/lib/python3.5/dist-packages/paramiko/file.py", line 79, in close
File "/usr/local/lib/python3.5/dist-packages/paramiko/file.py", line 88, in flush
TypeError: 'NoneType' object is not callable
或者像这样:
Exception ignored in: <object repr() failed>
Traceback (most recent call last):
File "/usr/local/lib/python3.5/dist-packages/paramiko/file.py", line 61, in __del__
File "/usr/local/lib/python3.5/dist-packages/paramiko/file.py", line 79, in close
File "/usr/local/lib/python3.5/dist-packages/paramiko/file.py", line 88, in flush
TypeError: 'NoneType' object is not callable
一切都一直工作正常,但大约有 10% 到 20% 的时间我会看到这些错误消息。有谁知道为什么有时清理会在程序终止时失败?如何避免这些错误消息?
最佳答案
由于某种原因,sys.exit时垃圾没有自动清理
要手动强制清除,您只需使用 del 删除分配的对象即可。
这是我的代码:
client = paramiko.SSHClient()
client.set_missing_host_key_policy(paramiko.AutoAddPolicy())
client.connect(host, port, username, password)
stdin_raw, stdout_raw, stderr_raw = client.exec_command(cmd)
exit_code = stdout_raw.channel.recv_exit_status()
stdout = []
for line in stdout_raw:
stdout.append(line.strip())
stderr = []
for line in stderr_raw:
stderr.append(line.strip())
# Clean up elements
client.close()
del client, stdin_raw, stdout_raw, stderr_raw
logger.debug("stdout: %s" % stdout)
logger.debug("stderr: %s" % stderr)
logger.debug("exit_code: %s" % exit_code)
请注意这一行:
del client, stdin_raw, stdout_raw, stderr_raw
这是我的来源: https://github.com/paramiko/paramiko/issues/1078#issuecomment-596771584
关于python - 为什么 paramiko 偶尔会引发异常?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37556888/
我不是 C 程序员。有什么想法吗? 这是我尝试过的安装命令: pip install paramiko sudo pip install paramiko 输出: src/_fastmath.c:15
Importing paramiko throws following exception on Python3. Traceback (most recent call last): File
我正在编写一个 Python 脚本,需要下载远程 xml 文件来解析它。 我正在使用 paramiko。 这是脚本: def copyFile(ip, user, pwd, remotePath, l
好的,所以我正在尝试在我的 python 脚本中实现 paramiko。 目的是连接同一局域网内的另一台PC,通过python执行命令。 我的 python 版本: Python 2.7.6 (def
我正在调试一些代码,这将导致我不断地登录/退出一些外部 sftp 服务器。有谁知道如果代码中出现非 paramiko 异常,paramiko 是否会自动关闭外部服务器上的 ssh/sftp sessi
我不断收到以下错误: Traceback (most recent call last): File "/home/d/workspace/paramiko/connect_test/main.p
我正在尝试通过 SSH 从 Python 远程执行命令,在这种特殊情况下需要将 stdin 重定向到/dev/null。 也就是说,与使用带有 -n 标志的 OpenSSH 客户端相同: ssh -n
当我尝试打开 mysql 工作台时,它显示“导入错误:没有名为 paramiko 的模块;操作失败:无法启动 SSH 隧道管理器”,尽管我已经安装了 paramiko。我正在使用 python 2.7
我正在尝试使用 paramiko 通过 netcat 反弹 SSH session : MyLocalMachine ----||----> MiddleMachine --(netcat)-->
我目前正在开发一个程序,该程序尝试联系运行 Cisco IOS 的众多路由器以获取其当前配置。我正在尝试使用 Paramiko 模块的 SSHClient 来实现这一点目的: def get_conf
我有基于 paramiko 模块的 python 2.7 代码,我想将其移植到 python 3.3,但我似乎找不到可以工作的 paramiko 版本或合适的替代版本。 我需要该模块在 Windows
我正在尝试运行使用 SSHLibrary 的机器人框架测试用例。我已经安装了所有必需的库(在本例中为 paramiko)。但我仍然收到此错误。 我得到的错误是: Error in file '/opt
有什么方法可以在后台运行 mysql 命令或保持连接事件一段时间,以便可以对其执行查询。可以用nohup来实现吗?如果是,怎么办? 最佳答案 是的,你可以用ajax来做到这一点 使用Nohup你可以做
我正在尝试在 python 中使用 paramiko 执行一个简单的代理命令。 基本上我正在尝试复制此 ssh 命令的行为: ssh -i ~/.ssh/destination_key user@de
This question already has answers here: Pass input/variables to command/script over SSH using Python
Paramiko 支持基于证书的身份验证吗? connect 方法中的 key_filename 提到它同时支持私钥和证书,这里的证书是指基于证书的身份验证吗? key_filename (str)
我刚刚尝试与 paramiko 进行 ssh 连接。一切看起来都很好,但在最后一步,当调用 close() 方法断开客户端连接时。 这是我的脚本: #!/usr/bin/python import p
上下文 如果有一个连接到服务器的脚本,然后 curl 本地主机以获取我需要的信息 问题 我的问题是,我需要从大约 200 台服务器获取信息,我使用的方法大约需要 15 分钟才能完成,这还不错,但我想做
我在尝试关闭 Paramiko SFTP 连接时遇到问题。即使我调用关闭连接仍然挂起,我通过运行 netstat (Windows) 检查: netstat -an | find ":22" 和pyt
localpath = 'U:\\' utime = sftp.stat("/TestBTEC/").st_mtime last_modified = datetime.fromtimestamp(u
我是一名优秀的程序员,十分优秀!