1

我的终端输出是

 $ 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'

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

4

2 回答 2

1

我猜你想为任何 tty打电话setserial(over )?pexpect你也许可以这样做:

import glob
import pexpect
for tty in glob.glob("/dev/ttyS*"):
    pexpect.run("setserial -g %s" % tty)
于 2012-12-20T11:04:32.450 回答
0

我认为在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*")
于 2012-12-20T11:36:01.277 回答