Python,引用中的引号
我正在尝试制作一个nagios脚本,但在处理双引号里面的单引号时遇到了一些问题。
我想传递以下内容:
select (select count(*) from v$session)/(select value from v$parameter where name = 'processes')*100 Percent from dual"
这个选择部分必须像上面那样用引号括起来。
我尝试了多种方式将其放入字符串中:
line=select (select count(*) from v$session)/(select value from v$parameter where name = 'processes')*100 Percent from dual"
然后创建了这样的命令:
process= '"' + line + '"'
p = subprocess.Popen( line.split())
不幸的是,line.split
没有正确解析引号。
这个“select”必须用引号括起来,而'processes'
则必须用单引号括起来。
有没有什么建议可以帮我解决这个问题?
更新:
显然问题出在“split”这个过程上。SQL语句必须完整传递,并且作为一个整体用引号括起来。不过,我需要传递很多复杂的参数,而line.split
在这方面是有效的,直到我遇到这个问题。
所以更好的问题是,我该如何格式化子进程,以便发送一个完整的字符串以及一长串(大约5个字符串参数)呢?
更新:
如果这对某些人有帮助的话。显然使用Popen时,你需要将参数和输入分开。例如,你不能发送"--test blah"
; 它必须是"--test", "blah"
。这意味着要发送一个字符串,你必须将其拆分。
不过,如果需要发送一个完整的字符串,你就得编辑它并添加到列表中。
例如:
a = "--test blah --something other"
b = a.split()
这将生成一个列表,Popen
会很好地处理它(使用subprocess.Popen(b)
)。
但是如果你还需要发送一个完整的字符串,比如:
sql = "select count(*) from v$session"
你不能简单地将其添加到“a string”中,比如a + sql
。你需要做类似这样的事情:
b.append(sql)
这样就会添加整个字符串,然后Popen
知道如何处理它。
不幸的是(至少据我所知),不能直接发送像Popen
这样的字符串:
c = a + sql
subprocess.Popen(c)
并获得响应,除非你使用shell=True
。不过,这样你得到的是返回语句,而不是输出。
希望这能帮助到和我有类似情况的人。
2 个回答
- 使用三重引号:
"""有效的单引号 ' 和双引号 " 在字符串中"""
或者
'''有效的单引号 ' 和双引号 " 在字符串中'''
- 如果你需要在单引号中使用引号,可以用反斜杠来转义:
"有效的 \" 字符串"
如果我理解你的意思,你是想在选择的内容周围加上引号,同时还想对 processes 周围的单引号进行转义。
可以试试使用三重引号:
line=""" "select (select count(*) from v$session)/(select value from v$parameter where name = \'processes\')*100 Percent from dual" """
...这样会输出:
"select (select count(*) from v$session)/(select value from v$parameter where name = 'processes')*100 Percent from dual"