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 |