我花了好几个小时来研究这个问题,并阅读了关于SO和python文档的其他问题,但是还没有解决这个问题。在
我试图让python使用变量在ssh上发送一个带有双引号(“)和正确间距的echo命令。在
下面是相关的代码片段:
ssh_upd = Popen([
'ssh', server, 'sudo', '-S',
"echo' " "" + mtpt + " " + " " +filervol + "'",
"|", "sudo tee -a", "/etc/"+map, ">", "/dev/null" ], stdout=None, stdin=PIPE, stderr=STDOUT)
mtpt和filervol都是前面在代码中定义的变量。在
上述代码生成以下输出:
^{pr2}$python需要发送:
echo "junk junk:/vol/junk"
提前谢谢你的帮助。在
我不知道你想在这里做什么:
……但是Python将如何解释它:
首先,
"echo' "
是一个6个字符的字符串(单词echo
,一个'
和一个空格)。那么""
是一个空字符串。它们被连接在一起(当然,形成相同的6个字符的字符串)。在如果要将双引号字符放入双引号字符串中,则必须使用反斜杠对其进行转义,如下所示:
^{pr2}$然而,有一种更简单的方法来处理这些问题:使用三重引用。大多数人都知道三重引号是处理多行字符串的一种方法,这一点很好,但对于包含两种引号的字符串也很有用:
另外,使用一个单一格式的字符串并对其调用
format
(或者,如果您愿意,可以使用%
运算符),而不是一遍又一遍地打开和结束引号以便使用字符串连接。在但同时,如果你想发送的是:
我不知道为什么要用
echo'
作为字符串的开头,但是很明显,你一下子就搞错了。你想要的是:我在那里放了5个空格,因为你的原始代码有一个2个空格的字符串加上了一个3个空格的字符串。但是你想要的输出有14个空格,所以…我不确定你到底想要什么。如果实际代码中涉及的制表符在复制粘贴到StackOverflow时丢失,我建议在文本中使用
\t
转义符,而不是实际的制表符。在如果在命令中使用
|
或>
,那么还需要使用shell=True
。在如果使用
shell=True
,则Popen
的第一个参数应该是字符串,而不是列表:请注意,如果发送到Popen的命令包含用户输入,则不应使用
shell=True
,因为这可能存在安全风险。(请务必阅读the Warning in the docs。)您可以避免使用},方法是使用多个popenconnecting one's stdout to the next one's stdin。在
shell=True
和管道|
,以及重定向{相关问题 更多 >
编程相关推荐