[英]single quotes and double quotes in python strings
我想调用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字符串中的转义,当有一个变量子串时,如何处理它
谢谢
您可以使用三引号:
"""ssh -t kity@{0} 'sudo nohup bash -c "./tcp_sender > /dev/null 2>&1 &"'""".format(ip_address)
Cameron Sparr已经给出了通用答案。
但在您的具体情况下,您可能不需要这个。
pexpect.spawn
接受命令和参数字符串或命令字符串以及单独的参数字符串列表。 对于其他库中的大多数类似方法(例如标准库subprocess
模块中的所有方法)也是如此。
因此,您只需要将每个参数设置为字符串,如下所示:
pexpect.spawn('ssh', ['-t', 'kity@192.199.61.205', 'sudo nohup bash -c "./tcp_sender > /dev/null 2>&1 &"'])
事实上,文档特别建议这一点,正是出于这个原因:
生成的第二种形式(在其中传递参数列表)在希望产生命令并传递其自己的参数列表的情况下很有用。 这可以使语法更加清晰。
当然,根据您的情况,您实际上是在生成一个带有参数列表的命令……其中之一本身就是一个生成的命令和一个参数列表( sudo
),依此类推几步( nohup
, bash
,最后是tcp_sender
),显然pexpect
只能帮助完成这些步骤中的第一步。 幸运的是,在这种情况下,这就是您所需要的。
如果确实需要更多,有一些库可以从参数列表中生成POSIX风格的带引号的字符串(基本上是shlex
),但是我几次需要一个,后来发现这是越野车,我最终自己重写了它……实际上并没有那么复杂(基本上,先逃避所有内容,然后引用所有参数)。 但希望您永远不必这样做。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.