2013-05-02 57 views
0

问题:Python转义sed和bash命令与子进程

如何成功使用python sed?我必须在远程服务器上运行此命令以获取逗号分隔的主机列表。当从庆典跑我得到我想要的是像主机1,主机2,主机3

以下是我有:

process = subprocess.Popen(["ssh [email protected] 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脚本运行它时,即使尝试了一次逃生的聚宝盆,我也会得到无效语法的错误。

回答

2

由于您在双引号字符串中使用",因此字符串引用被打破。你必须逃脱",比如\"。此外请注意,命令行中的大部分双引号都可以用单引号'替代。下面的代码应该工作:

process = subprocess.Popen(["ssh [email protected] 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) 
+0

SyntaxError:在扫描字符串文字时的EOL – Kryten 2013-05-02 22:42:40

+0

只是为了防止滚动条。现在它应该按原样工作,但可读性较差。 – hek2mgl 2013-05-02 22:52:09

+0

太棒了。你是一个拯救生命的人,谢谢! – Kryten 2013-05-02 23:04:36