Python:pexpect不执行`backtick`命令

时间:2016-10-16 16:08:33

标签: python bash pexpect

我试图运行此命令:

foo=`ls /`

完全适用于bash,但如果我通过pexpect执行它,则不行。

p = pexpect.spawn("foo=`ls /`").interact()

// Gives error command was not found or not executable: foo=`ls

原因是什么?如何解决?我甚至试图逃避`但似乎它不起作用。

1 个答案:

答案 0 :(得分:1)

您尝试执行的命令需要bashpexpect不会通过bash传递您的命令,而是直接调用您的可执行文件,就像它是shell一样。

来自the docs

  

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

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

虽然文档没有提到它们,但这肯定也适用于反引号。因此,编写代码以明确调用bash

p = pexpect.spawn('/bin/bash -c "foo=`ls /`"').interact()