我现在很困惑。
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 提到元字符不起作用,当它显然是这样的时候?
答案 0 :(得分:3)
pexpect.spawn
不解释shell元字符,但是在pexpect内运行的任何东西(可能是shell)显然都是这样:
child = pexpect.spawn('/bin/bash')
child.sendline('echo hello | cat')
pexpect只是将字符串传递给子进程;它没有解释它。