Python,qu中的引号

2024-03-29 11:21:48 发布

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

我试图构建一个nagios脚本,但是在双引号中有一个问题。在

我试图通过以下内容:

select (select count(*) from v$session)/(select value from v$parameter where name = 'processes')*100 Percent from dual"

必须像上面一样引用select。在

我试着用不同的方法把它传给绳子:

^{pr2}$

然后创建了这样的命令:

process= '"' + line + '"'

p = subprocess.Popen( line.split())

不幸的是,line.split没有进行正确的引号解析。在

“select”必须用引号引起来,'processes'必须用一个引号引起来。在

有什么建议吗?在

更新:

显然问题出在“分割”过程上。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 + sql那样把它添加到“字符串”中。你需要这样做:

b.append(sql)

它将添加整个字符串,然后Popen知道如何处理它。在

不幸的是(至少据我所知),不能发送Popen一个字符串,例如:

c = a + sql
subprocess.Popen(c)

除非使用shell=True,否则会得到响应。但是,您得到的是返回语句而不是输出。在

希望这能帮助像我这样处境相似的人。在


Tags: 字符串fromtest列表sqlsessioncountline
2条回答

如果我理解您的要求,那么您希望能够在select周围使用引号,并且还可以对进程周围的单引号进行转义。在

尝试使用triple quotes

line=""" "select (select count(*) from v$session)/(select value from v$parameter where name = \'processes\')*100 Percent from dual" """

…打印:

^{pr2}$
  • 使用三重引号:

"""valid single ' and double quotes " in string"""

或者

'''valid single ' and double quotes " in string'''

  • 如果需要在单引号中使用引号,请用反斜杠转义:

"valid \" string"

相关问题 更多 >