我想更新文件(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
答案 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。