Paramiko和“远程python”

时间:2011-07-05 14:27:00

标签: python paramiko

我希望能够通过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

允许我使用pdbchannel.set("command\n")与远程应用程序通信。

它与bashgdb完美配合,但我无法从python(v2)获取输出流

Python如何处理其输出流,为什么我的代码无法使用它?

2 个答案:

答案 0 :(得分:2)

根据您的目标,您可以遵循以下两种方式之一(我确信还有其他几种选择!)。

如果你想通过python控制在远程机器上执行脚本,你可以试试Fabric。来自他们的网站:

  

Fabric是一个Python(2.5或更高版本)库和命令行工具,用于简化SSH在应用程序部署或系统管理任务中的使用。它提供了一套基本的操作套件,用于执行本地或远程shell命令(通常或通过sudo)和上传/下载文件,以及辅助功能,如提示正在运行的用户输入或中止执行。

如果您想控制远程进程并将其输出集成到主程序流中,则可以使用multiprocessing module。来自PEP 371

  

该软件包还提供服务器和客户端功能(processing.Manager),以提供对象和任务的远程共享和管理,以便应用程序不仅可以利用本地计算机上的多个核心,还可以跨群集分发对象和任务。联网机器。

答案 1 :(得分:2)

除非这是一项学术练习,或者您有一些特定的要求使用ssh,请查看pushy。我从来没有用它,但似乎已经成熟了。