包括pexpect.run中的通配符()

时间:2012-12-20 10:48:10

标签: python wildcard pexpect

我的终端输出是

 $ setserial -g /dev/ttyS*
   /dev/ttyS0, UART: unknown, Port: 0x03f8, IRQ: 4
   /dev/ttyS1, UART: unknown, Port: 0x02f8, IRQ: 3
   /dev/ttyS2, UART: unknown, Port: 0x03e8, IRQ: 4 
   /dev/ttyS3, UART: unknown, Port: 0x02e8, IRQ: 3

我希望pexpect.run()

获得相同的结果
>>> import pexpect
>>> pexpect.run("setserial -g /dev/ttyS1")
'/dev/ttyS1, UART: unknown, Port: 0x02f8, IRQ: 3\r\n'
>>> 
>>> 
>>> pexpect.run("setserial -g /dev/ttyS*")
'/dev/ttyS*: No such file or directory\r\n'

有没有办法在命令中包含“*”??

2 个答案:

答案 0 :(得分:1)

我想你想要setserial(超过pexpect)来获取任何tty?你也许可以这样做:

import glob
import pexpect
for tty in glob.glob("/dev/ttyS*"):
    pexpect.run("setserial -g %s" % tty)

答案 1 :(得分:0)

我认为在documentation of the spawn-question

中找到了问题的答案
  

请记住,Pexpect不会解释shell元字符,例如   重定向,管道或外卡(>,|或*)。这是一个常见的错误。   如果要运行命令并通过另一个命令管道它   你还必须启动一个shell。例如::

child = pexpect.spawn('/bin/bash -c "ls -l | grep LOG > log_list.txt"')
child.expect(pexpect.EOF)

你可以尝试一下吗?

pexpect.run("/bin/bash setserial -g /dev/ttyS*")