繁体   English   中英

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

[英]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 ),依此类推几步( nohupbash ,最后是tcp_sender ),显然pexpect只能帮助完成这些步骤中的第一步。 幸运的是,在这种情况下,这就是您所需要的。

如果确实需要更多,有一些库可以从参数列表中生成POSIX风格的带引号的字符串(基本上是shlex ),但是我几次需要一个,后来发现这是越野车,我最终自己重写了它……实际上并没有那么复杂(基本上,先逃避所有内容,然后引用所有参数)。 但希望您永远不必这样做。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM