我正在编写一个程序,它启动与远程计算机的连接,然后通过监视响应动态地向其发送多个命令。而不是使用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。
由于
答案 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