我希望能够通过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")
与远程应用程序通信。
它与bash
和gdb
完美配合,但我无法从python
(v2)获取输出流
Python如何处理其输出流,为什么我的代码无法使用它?
答案 0 :(得分:2)
根据您的目标,您可以遵循以下两种方式之一(我确信还有其他几种选择!)。
如果你想通过python控制在远程机器上执行脚本,你可以试试Fabric。来自他们的网站:
Fabric是一个Python(2.5或更高版本)库和命令行工具,用于简化SSH在应用程序部署或系统管理任务中的使用。它提供了一套基本的操作套件,用于执行本地或远程shell命令(通常或通过sudo)和上传/下载文件,以及辅助功能,如提示正在运行的用户输入或中止执行。
如果您想控制远程进程并将其输出集成到主程序流中,则可以使用multiprocessing module。来自PEP 371:
该软件包还提供服务器和客户端功能(processing.Manager),以提供对象和任务的远程共享和管理,以便应用程序不仅可以利用本地计算机上的多个核心,还可以跨群集分发对象和任务。联网机器。
答案 1 :(得分:2)
除非这是一项学术练习,或者您有一些特定的要求使用ssh,请查看pushy。我从来没有用它,但似乎已经成熟了。