繁体   English   中英

Paramiko 和“远程蟒蛇”

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM