1

我希望能够通过 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它与, with完美配合gdb,但我无法从python(v2)获取输出流

Python如何处理它的输出流,为什么我的代码不能用它?

4

2 回答 2

2

根据您的目标,您可以采用这两种方式之一(不过,我相信还有其他几种选择!)。

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

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

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

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

于 2011-07-05T14:32:27.390 回答
2

除非这是一项学术练习,或者您对使用 ssh 有一些特定要求,否则请查看pushy。我从未使用过它,但它看起来很成熟。

于 2011-07-05T14:34:13.557 回答