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

时间:2017-08-08 17:26:59

标签: python subprocess

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

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 个答案:

答案 0 :(得分:1)

请参阅子流程文档以了解基础知识here

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

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

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