【python】Linux环境上如何在某种模式中发送命令并得到回显,请大神们帮忙~

梧桐126 2013-06-18 02:30:15
比如Linux环境上有模式A,在A模式中可以输入某些命令,比如show BB:
Linux# A #输入A进入模式A
A# show BB #在A模式中输入对应的命令

问题:在python中怎么发送A模式命令并得到回显?

我用subprocess实现,效果如下:
import subprocess
subprocess.call("A",shell=True)
subprocess.call("show BB",shell=True)

在这里就报错了,直接进入到了A模式,show BB根本发送不了,请大神们帮忙看看怎么实现?谢谢了!
...全文
306 6 打赏 收藏 转发到动态 举报
写回复
用AI写文章
6 条回复
切换为时间正序
请发表友善的回复…
发表回复
梧桐126 2013-06-20
  • 打赏
  • 举报
回复
好详细,谢谢上面的大神!
panghuhu250 2013-06-20
  • 打赏
  • 举报
回复
subprocess.Popen有参数stdin,stdout,stderr,把它们设为PIPE,即可通过对应的pipe与进程通信。 例子,要在subprocess中运行的命令如下:

#! /bin/bash
while read x
do 
  if [[ -z $x ]] 
  then break
  else echo $x
  fi
done
它的作用就是如果输入不为空,则打印该输入,否则终止。在shell中运行如下:

/tmp/ bash /tmp/echoing 
123
123
456
456
456789
456789

/tmp/ 
下面是用subprocess.Popen执行该程序,并通过stdin,stdout与该程序通信的例子:

In [24]: a = subprocess.Popen(['bash', '/tmp/echoing'], stdin = subprocess.PIPE, stdout = subprocess.PIPE) # 建立进程

In [25]: a.stdin.write('123\n') # 输入

In [26]: a.stdout.readline() # 输出
Out[26]: '123\n'

In [27]: a.stdin.write('456') # 输入没有\n结尾,echoing暂时接受不到456,也就没有输出

In [28]: a.stdout.readline() # 因为进程a没有输出,这个语句被block了,只有ctrl-C取消
---------------------------------------------------------------------------
KeyboardInterrupt                         Traceback (most recent call last)
<ipython-input-28-f95b4fc7f77a> in <module>()
----> 1 a.stdout.readline()

KeyboardInterrupt: 

In [29]: a.stdin.write('789\n') # 继续输入789,并回车

In [30]: a.stdout.readline() # 有输出了
Out[30]: '456789\n'

In [31]: a.stdin.write('') # 没有输入

In [32]: a.wait() # a仍在允许,这儿又被block了, ctrl-C取消
---------------------------------------------------------------------------
KeyboardInterrupt                         Traceback (most recent call last)
<ipython-input-32-eb63b29ac52d> in <module>()
----> 1 a.wait()

/usr/lib/python2.7/subprocess.pyc in wait(self)
   1299             if self.returncode is None:
   1300                 try:
-> 1301                     pid, sts = _eintr_retry_call(os.waitpid, self.pid, 0)
   1302                 except OSError as e:
   1303                     if e.errno != errno.ECHILD:

/usr/lib/python2.7/subprocess.pyc in _eintr_retry_call(func, *args)
    476     while True:
    477         try:
--> 478             return func(*args)
    479         except (OSError, IOError) as e:
    480             if e.errno == errno.EINTR:

KeyboardInterrupt: 

In [33]: a.stdout.readline() # 没有输出,无法读取
---------------------------------------------------------------------------
KeyboardInterrupt                         Traceback (most recent call last)
<ipython-input-33-f95b4fc7f77a> in <module>()
----> 1 a.stdout.readline()

KeyboardInterrupt: 

In [34]: a.stdin.write('\n') # 空输入 

In [35]: a.wait() # 进程a终止了
Out[35]: 0

In [36]: 
梧桐126 2013-06-19
  • 打赏
  • 举报
回复
高手帮忙啊!
梧桐126 2013-06-18
  • 打赏
  • 举报
回复
引用 1 楼 csz429180 的回复:
A模式类似于mysql这种 用mysql命令进入mysql的终端后输入sql语句这种情况?
对,是类似这个,需要往里面发送命令! pexpect是一个库吗?能否说详细点?
手无护鸡之力 2013-06-18
  • 打赏
  • 举报
回复
你这个用subprocess实现不了吧,好像pexpect可以干这个,交互的
csz429180 2013-06-18
  • 打赏
  • 举报
回复
A模式类似于mysql这种 用mysql命令进入mysql的终端后输入sql语句这种情况?
Re: 《Linux 系统常用内置命令》  ---------------------------------------内容提要:     01. Linux内置命令概述;两栖命令 echo pwd kill 等等    02. 判断内置命令的方式;help -d [command] 能够正常回显    03. 内置命令在 shell 脚本的基础应用介绍    04. 内置命令 alias 和 unalias 自定义别名和删除别名;临时生效与永久生效    05. 后台前台 出将入相 腾腾转 任务相关命令 bg fg jobs    06. SHELL 循环的处理方式 break continue exit    07. 常见 builtin 内置命令 eval exit export history    08. 内置命令 read 交互式赋值变量;type 判断命令类型    09. 内置命令 ulimit 修改系统资源使用限制;unset 清空变量  本人在教学和实战过程发现,即便是有一定运维经验的人,可能已经能够搭建一定复杂度的Linux架构,但是在来来回回的具体操作,还是体现出CLI(命令界面)功底不够扎实,甚至操作的非常‘拙’、处处露‘怯’。 对一个士兵来说,枪就是他的武器,对于一个程序员来说,各种library(工具库)就是他的武器;而对于Linux运维人员来说,无疑命令行工具CLI(命令界面)就是他们的武器;高手和小白之间的差距往往就体现在对于这些“武器”的掌握和熟练程度上。有时候一个参数就能够解决的事情,小白们可能要写一个复杂的Shell脚本才能搞定,这就是对CLI(命令界面)没有理解参悟透彻导致。 研磨每一个命令就是擦拭手的作战武器,平时不保养不理解,等到作战的时候,一定不能够将手的武器发挥到最好,所以我们要平心、静气和专注,甘坐冷板凳一段时间,才能练就一身非凡的内功! 本教程从实战出发,结合当下流行或最新的Linux(v6/7/8 版本)同时演示,将命令行结合到解决企业实战问题来,体现出教学注重实战的务实精神,希望从事或未来从事运维的同学,能够认真仔细的学完Linux核心命令的整套课程。 本课程系列将逐步推出,看看我教学的进度和您学习的步伐,孰占鳌头! 注:关于教学环境搭建,可以参考本人其它课程系列,本教学就不再赘述!  《参透 VMware 桌面级虚拟化》 《在虚拟机安装模版机(包括应用软件等)》 《SecureCRT 连接 GNS3/Linux 的安全精密工具》

37,720

社区成员

发帖
与我相关
我的任务
社区描述
JavaScript,VBScript,AngleScript,ActionScript,Shell,Perl,Ruby,Lua,Tcl,Scala,MaxScript 等脚本语言交流。
社区管理员
  • 脚本语言(Perl/Python)社区
  • IT.BOB
加入社区
  • 近7日
  • 近30日
  • 至今

试试用AI创作助手写篇文章吧