使用pxssh / pexpect发送管道命令

时间:2015-07-03 15:20:59

标签: python bash

我目前正在使用pxssh for Python,它的工作就像一个魅力,但似乎它不处理管道(|)命令 - 它将它们解释为单独的。

目前我有以下内容:

s = pxssh.pxssh()
s.login(sshHost, sshUsername, sshPassword)
s.sendline("cat somefile | grep something | cut -d \' -f 4")

它适用于任何非管道的命令,但是我需要发送一个管道。

pxssh有没有办法解决这个问题,或者你可以建议一种方法来实现这个命令的另一个解决方案吗?

1 个答案:

答案 0 :(得分:1)

我不清楚为什么pxssh会像你描述的那样表现。您确定问题不在于您的\'是否由Python解释,而您希望它由远程shell解释?那样拼写会更好:

s.sendline("cat somefile | grep something | cut -d \\' -f 4")

你当然有其他选择。一种方法是使用单个命令而不是管道,例如:

s.sendline("sed -n '/something/ { s/\\([^,]*,\\)\\{3\\}\\([^,]*\\),.*/\\2/; p }'")

作为一种特殊情况,您可以启动运行管道的子shell:

s.sendline('''bash -c "cat somefile | grep something | cut -d \\' -f 4"''')