带引号的查询的Python子流程

时间:2016-07-14 06:53:19

标签: python subprocess

我需要触发这个在终端上运行完美的查询:

sed -i '' '/default\]/a\'$'\n''  Hello world'$'\n' <PATH_TO_FILE>

这会在我找到的位置下方添加一行&#34;默认值]&#34;字符串。

使用python代码:

query = r""" sed -i '' '/default\]/a\'$'\n''  Hello world'$'\n' %s """ % (PATH_T)_FILE)
proc = subprocess.Popen(query.split(), stdout=subprocess.PIPE, stderr=subprocess.PIPE)
output, err =  proc.communicate()

但是,命令在python中失败,错误:

Error executing the query  sed -i '' '/default\]/a\'$'\n''  Hello world'$'\n' /Users/hshah/tmpFile . output = , error = sed: 1: "'/default\]/a\'$'\n''": invalid command code '

这可能是什么问题?

1 个答案:

答案 0 :(得分:2)

每个空白处split。这会导致query.split()

['sed',
 '-i',
 "''",
 "'/default\\]/a\\'$'\\n''",
 'Hello',
 "world'$'\\n'",
 '/tmp/foo']

这不是你想要的。手动构建subprocess.Popen的参数,而不是分割字符串。