[英]Paramiko and “remote python”
我希望能够通过 SSH 连接控制远程 Python 解释器,并从 Python 本身驱动它。
我有一个基本模板:
ssh.connect(servername, serverport, username, key_filename=key_filename)
transport = ssh.get_transport()
channel = transport.open_session()
channel.exec_command(PATH_TO_EXEC)
while True:
r, w, e = select.select([channel], [], [], 1)
if channel in r:
try:
if channel.recv_ready():
x = channel.recv(64)
elif channel.recv_stderr_ready():
x = channel.recv_stderr(64)
else:
continue
if len(x) == 0:
print '\r\n*** EOF\r\n',
break
sys.stdout.write(x)
sys.stdout.flush()
except socket.timeout:
pass
这使我可以使用pdb
与远程应用程序对话: channel.set("command\n")
。
It works perfectly with bash
, with gdb
, but there is nothing I can do to get an output stream from python
(v2)
Python 如何处理它的 output stream,为什么我的代码不起作用?
根据您的目标,您可以采用这两种方式中的一种(不过,我相信还有其他几种选择。)。
如果你想通过 python 控制远程机器上脚本的执行,你可以试试Fabric 。 从他们的网站:
Fabric 是一个 Python(2.5 或更高版本)库和命令行工具,用于简化 SSH 在应用程序部署或系统管理任务中的使用。 它提供了一套基本的操作,用于执行本地或远程 shell 命令(通常或通过 sudo)和上传/下载文件,以及提示运行用户输入或中止执行等辅助功能。
如果你想控制远程进程并将它们的 output 集成到你的主程序流中,你可以使用multiprocessing 模块。 来自PEP 371 :
package 还提供服务器和客户端功能 (processing.Manager) 以提供对象和任务的远程共享和管理,以便应用程序不仅可以利用本地计算机上的多个内核,还可以跨联网计算机集群分发对象和任务。
除非这是一个学术练习,或者您有使用 ssh 的特定要求,请查看pushy 。 我从未使用过它,但它看起来很成熟。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.