如何使用 get_pty=False 将 Ctrl+C 发送到 Python Paramiko

我想使用带有 get_pty=False 选项的 paramiko 客户端。我们有办法发送中断信号吗?我有一些想法喜欢使用 client.close() 但我更想知道为什么发送"\0x03"失败get_pty=False。


import paramiko

client = paramiko.SSHClient()

client.set_missing_host_key_policy(paramiko.AutoAddPolicy())

connection_param= {'hostname': '192.168.255.1',

            'username': 'username',

            'password': 'password',

            'port': '22',

            'timeout': 15,

            'key_filename': None,

            'pkey': None}

client.connect(**connection_param)

stdin, stdout, stderr = client.exec_command("tail -f /tmp/test.log", bufsize=-1, timeout=None, get_pty=True)

time.sleep(1)

print(stdin.channel.exit_status_ready())  # False

stdin.write("\x03".encode())

stdin.channel.close()

print(stdout.read().decode(errors='ignore')) # File output

print(stdin.channel.exit_status_ready())  # True

stdin, stdout, stderr = client.exec_command("tail -f /tmp/test.log", bufsize=-1, timeout=None, get_pty=False)

time.sleep(1)

print(stdin.channel.exit_status_ready())  # False

stdin.channel.close()   # hangs in next step for stdin.write("\x03".encode())

print(stdout.read().decode(errors='ignore')) # File output

print(stdin.channel.exit_status_ready())  # True

我们还有其他方法可以使用stdin.write()for发送中断信号吗get_pty=False?


哈士奇WWW
浏览 312回答 1
1回答

慕标琳琳

我相信这Ctrl+C是一个终止信号。如果没有终结符 ( get_pty=false),则没有任何特殊含义。如果要终止远程命令,只需关闭“exec”通道即可。stdin.channel.close()你已经在做什么了。
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Python