python字符串中的单引号和双引号

时间:2013-04-18 23:30:47

标签: python linux

我想调用python函数pexpect.spawn(cmd),其中cmd是一个字符串,如下所示:

ssh -t kity@192.199.61.205 'sudo nohup bash -c "./tcp_sender > /dev/null 2>&1 &"'

ip地址总是在变化,所以它类似于:

ssh -t kity@%s 'sudo nohup bash -c "./tcp_sender > /dev/null 2>&1 &"' %host_ip

有几个'",我不知道如何处理它 所以基本上,它是关于如何处理python字符串中的转义 当有一个变量子串时,如何处理它

感谢

2 个答案:

答案 0 :(得分:7)

你可以使用三重引号:

"""ssh -t kity@{0} 'sudo nohup bash -c "./tcp_sender > /dev/null 2>&1 &"'""".format(ip_address)

答案 1 :(得分:0)

Cameron Sparr已经给出了通用答案。

但在你的具体情况下,你可能不需要这个。

pexpect.spawn接受命令和参数字符串命令字符串和单独的参数字符串列表。对于其他库中的大多数类似方法(例如标准库subprocess模块中的所有内容)也是如此。

所以,你只需要将每个参数都变成一个字符串,如下所示:

pexpect.spawn('ssh', ['-t', 'kity@192.199.61.205', 'sudo nohup bash -c "./tcp_sender > /dev/null 2>&1 &"'])

事实上,文档特别提出了这一点,正是出于这个原因:

  

第二种形式的spawn(传递参数列表)很有用   在您希望生成命令并将其传递给自己的情况下   参数列表。这可以使语法更清晰。

当然,在你的情况下,你实际上正在生成一个带有参数列表的命令...其中一个本身就是一个生成命令和一个参数列表(sudo),等等几步最后一行(nohupbash,最后是tcp_sender),显然pexpect只能帮助完成这些步骤中的第一步。幸运的是,在这种情况下,这就是你所需要的。

如果你需要更多,那里有一些库可以从参数列表中生成POSIX风格的引用字符串(基本上与shlex相反),但是几次我需要一个,我发现的那个变成了马车,我最后自己重写了它......实际上并没有那么复杂(基本上,只是逃避一切然后引用所有的论点)。但希望你永远不必这样做。