无法使用python"命令运行awk命令"模块。报价问题

时间:2017-04-12 09:03:30

标签: python bash shell awk ssh

我想更新文件(file_from)中第二行的第二列,并将结果保存在' file_to'通过不同机器上的ssh&用户。我使用PyQt模块进行GUI,并使用了'命令'用于运行shell脚本的模块。

这就是我想要做的事情:

file_to

但它所做的只是清空(空)我的档案For CLS = 0 To DGV.ColumnCount - 1 DTB.Columns.Add(DGV.Columns(CLS).Name.ToString) Next

1 个答案:

答案 0 :(得分:0)

尝试通过ssh运行带有复杂引用的命令总是很棘手,因为它在远程主机上经历了额外级别的令牌扩展。也就是说,如果你运行:

ssh anotherhost awk '{print "hello", $1}' myfile

它在远程主机上被标记为:

argv[0] = awk
argv[1] = {print
argv[2] = hello,
argv[3] = }
argv[4] = myfile

这几乎不是你想要的。从命令行,您需要执行以下操作:

ssh anotherhost "awk 'FNR==2 {\$2=1};1' file_from > file_to"

这确保了远程端的正确标记化,并避免了可能发生的变量扩展。现在你只需要用commands.getoutput包裹它:

commands.getoutput('''ssh anotherhost "awk 'FNR==2 {\$2=1};1' file_from > file_to"''')

我们在这里使用python的三重引号来避免添加任何额外的转义。

对于更复杂的事情,最好将脚本文件复制到远程主机,或者只打开shell并将脚本写入stdin。