我试图构建一个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
,否则会得到响应。但是,您得到的是返回语句而不是输出。在
希望这能帮助像我这样处境相似的人。在
如果我理解您的要求,那么您希望能够在select周围使用引号,并且还可以对进程周围的单引号进行转义。在
尝试使用triple quotes:
…打印:
^{pr2}$"""valid single ' and double quotes " in string"""
或者
'''valid single ' and double quotes " in string'''
"valid \" string"
相关问题 更多 >
编程相关推荐