python - 如果 MySQL 正在运行,如何在 ubuntu 上用 python 找出?

标签 python mysql ubuntu subprocess

在 Ubuntu 上这个命令行:

sudo netstat -tap | grep mysql

如果 MySQL 正在运行,则返回类似的内容:

tcp  0  0 localhost:mysql  *:*  LISTEN  6732/mysqld

如果不是,则什么也没有。

我正在使用子进程从 python 代码内部找出 MySQL 是否启动,方法是在 netstat 返回的内容中查找“LISTEN”,这样做:

import subprocess

msqlr = subprocess.Popen(["sudo netstat -tap | grep mysql"], stdout=subprocess.PIPE).communicate()[0]
msqlrLines = msqlr.split("\n")
vals = msqlrLines[0].split()
print "vals[0] : %s" % vals[0]
if vals[0][-2] == "LISTEN":
    print "OK - MySQL is running."
else:
    print "Not OK - MySQL is not running."

当我运行它时它返回:

OSError: [Errno 2] No such file or directory

当在同一个 subprocess.Popen 中时...我使用单字参数(比如“df”)——它工作正常。如果参数不止一个词(即“df -h/”或像这里的“sudo netstat -tap | grep mysql”)——我会收到“没有这样的文件或目录”错误。

以及相关问题 (#2),当我在命令行中运行此命令时 — 有时它会要求输入 root 密码。如何从 python 脚本传递密码?

最佳答案

试试这个。

import subprocess
import string

msqlr = subprocess.Popen("sudo /usr/sbin/netstat -al".split(), stdout=subprocess.PIPE).stdout
grep = subprocess.Popen(["/usr/bin/grep", "mysql"], stdin=msqlr, stdout=subprocess.PIPE).stdout
msqlrLines = grep.read().split("\n")
vals = map(string.strip, msqlrLines[0].split())
print vals
if vals[-1] in ("LISTENING", "LISTEN"):
    print "OK - MySQL is running."
else:
    print "Not OK - MySQL is not running."

输出 在我的机器上:

['tcp4', '0', '0', '*.mysql', '*.*', 'LISTEN']
OK - MySQL is running.

这里的想法是您执行正常的 netstat,并收集所有数据。然后使用该子过程的标准输出作为下一个子过程的标准输入,并在那里进行 grep。

这里是在ubuntu 12.04上运行的例子

import subprocess
import string

msqlr = subprocess.Popen("sudo /bin/netstat -al".split(), stdout=subprocess.PIPE).stdout
grep = subprocess.Popen(["/bin/grep", "mysql"], stdin=msqlr, stdout=subprocess.PIPE).stdout
msqlrLines = grep.read().split("\n")
vals = map(string.strip, msqlrLines[0].split())
print vals
if len(vals) and vals[-1] in ("LISTENING", "LISTEN"):
    print "OK - MySQL is running."
else:
    print "Not OK - MySQL is not running."

关于python - 如果 MySQL 正在运行,如何在 ubuntu 上用 python 找出?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13104944/

相关文章:

linux - Nginx Proxy 下多个位置多个服务器

linux - 使用 GREP 查找是否在特定文件夹中找到文件的每一行

php - 如何将用逗号分隔的 SQL 列数据分离为单个值,然后对这些值进行计数

mysql - Dapper 返回 01-01-0001 00 :00:00 from MySQL DATETIME

python - 我在 Python 3 的字典中调用函数

python - 这在一个 SSH session 中可能吗? (巴什和 python )

mysql - MySQL 中的 WHILE 语法错误

node.js - npm 为全局安装的包设置奇怪的权限

python - celery 击败方法任务不起作用

python - 有没有办法在 Tkinter 中拥有带有 Canvas 的 "default color"?