Python使用子进程转义sed和bash命令



问题:

如何成功地将sed与python结合使用?我必须在远程服务器上运行此命令才能获得逗号分隔的主机列表。当从bash运行时,我得到了我想要的东西,比如host1、host2、host3

这是我所拥有的:

process = subprocess.Popen(["ssh $USER@mychefserver knife search node "chef_environment:*" | grep -i "node name" | egrep -i "stuff|ruff" | uniq -u | sort -n | cut -d ":" -f 2 | sed -e 's/^[ t]*//' | tr 'n' ', '
"], shell=False, stdout=PIPE)

我知道我必须转义\n、\t等,但其余的都有问题。每当我试图从Python脚本中运行它时,我都会收到一个无效语法的错误,尽管我已经尝试了大量的转义。

在双引号字符串中使用"时,字符串引号会中断。你必须像逃离"一样逃离"。进一步注意,命令行中的大多数双引号都可以用单引号'代替。以下代码应该有效:

process = subprocess.Popen(["ssh $USER@mychefserver knife search node "chef_environment:*" | grep -i 'node name' | egrep -i 'stuff|ruff' | uniq -u | sort -n | cut -d':' -f 2 | sed -e 's/^[ t]*//' | tr 'n' ', '"], shell=False, stdout=subprocess.PIPE)

最新更新