如何在paramiko中运行管道命令?我这样做:
statement = 'grep thing file | grep thing2 | tail -1'
last_msg = conn.execute(statement)
我只得到grep thing file
的输出。
答案 0 :(得分:7)
因为grep
不知道如何处理|
。为一些讨厌的逃避做好准备:
statement = """sh -c 'grep thing file | grep thing2 | tail -1'"""
这会在另一侧创建一个shell,并要求它解释字符串grep thing file | grep thing2 | tail -1
。单引号是必要的,因为sh -c
只接受一个参数。
这样,shell将为您创建管道,运行所有命令。最好确保文件名file
不包含空格。如果是,请尝试"file"
。
正如你所看到的,这很快变得非常难看。我建议你把管道放到shell脚本中。然后,您可以避免使用引号,只需使用sh -c script.sh
运行脚本。