如何在Python中创建子进程,根据以前的输出发送多个命令

How to create a subprocess in Python, send multiple commands based on previous output

我正在编写一个程序,它启动与远程机器的连接,然后通过监视响应动态地向它发送多个命令。 而不是使用pexpect,我还可以使用什么? 我试图使用subprocess.Popen,但通信()方法将终止进程。

Pexpect版本:2.4,http://www.bx.psu.edu/~nate/pexpect/pexpect.html

参考子进程的API:
https://docs.python.org/2/library/subprocess.html#subprocess.Popen.communicate
Popen.communicate(输入=无)
与流程交互:将数据发送到stdin。 从stdout和stderr读取数据,直到达到文件结尾。 等待进程终止。 可选的输入参数应该是要发送到子进程的字符串,如果没有数据应该发送给子进程,则应为None。

谢谢


请参阅子流程文档以了解此处的基础知识

你可以这样做......
同样,这只是一个指针...这种方法可能/可能不适合您的用例。

探索 - >和测试找到适合你的东西!

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
import shlex
import subprocess
import sys

class Command(object):
   """ Generic Command Interface ."""

    def execute(self, cmd):
        proc = subprocess.Popen(shlex.split(cmd), stdout=subprocess.PIPE)
        stdout_value = proc.communicate()[0]
        exit_value = proc.poll()
        if exit_value:
            logger.error('Command execution failed. Command : %s' % cmd)
        return exit_value, stdout_value


if __name__ == '__main__':

    cmd = Command()
    host = ''  # HOSTNAME GOES HERE
    cmd_str = '' # YOUR COMMAND GOES HERE
    cmdline = 'ksh -c"ssh root@{0}"{1}""'.format(host, cmd_str)  
    exit_value, stdout_value = cmd.execute(cmdline)

    if exit_value == 0:
        # execute other command/s
        # you basically use the same logic as above
    else:
        # return Or execute other command/s