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

2024-10-01 15:40:08 发布

您现在位置:Python中文网/ 问答频道 /正文

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

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

ip地址总是在变化,因此它类似于:

^{pr2}$

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

谢谢


Tags: 函数字符串devipcmdbashsudonull
2条回答

您可以使用三重引号:

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

卡梅隆·斯帕尔已经给出了通用答案。在

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

^{}接受命令和参数字符串命令字符串和独立参数字符串列表。对于其他库中大多数类似的方法也是如此(比如标准库subprocess模块中的所有内容)。在

所以,你只需要把每个参数变成一个字符串,像这样:

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

事实上,文件明确提出了这一点,原因正是:

The second form of spawn (where you pass a list of arguments) is useful in situations where you wish to spawn a command and pass it its own argument list. This can make syntax more clear.

当然,在您的例子中,您实际上是在生成一个带有参数列表的命令……其中一个本身就是一个要生成的命令和一个参数列表(sudo),以此类推(nohupbash,最后是tcp_sender),显然{}只能帮助完成其中的第一步。幸运的是,在这种情况下,这就是你所需要的。在

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

相关问题 更多 >

    热门问题