pexpect和shell元字符(>,|或*)

时间:2012-12-04 11:24:25

标签: python ssh pexpect metacharacters

我现在很困惑。

pexpect documentation声明如下:

Remember that Pexpect does NOT interpret shell meta characters such as
redirect, pipe, or wild cards (>, |, or *). This is a common mistake.
If you want to run a command and pipe it through another command then
you must also start a shell. For example::

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

但是,我正在查看在|中使用*pexpect.sendline(some command | grep 'something')的旧代码。 所以我开始测试这些命令,它们似乎都有效。值得一提的是,我没有使用修改过的pexpect模块,它对于python来说是一个古老的pexpect。

为什么?为什么 pexpect 提到元字符不起作用,当它显然是这样的时候?

1 个答案:

答案 0 :(得分:3)

pexpect.spawn不解释shell元字符,但是在pexpect内运行的任何东西(可能是shell)显然都是这样:

child = pexpect.spawn('/bin/bash')
child.sendline('echo hello | cat')

pexpect只是将字符串传递给子进程;它没有解释它。