4

Ubuntuの場合、このコマンドラインは次のとおりです。

sudo netstat -tap | grep mysql

MySQLが実行されている場合、次のようなものが返されます。

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

そうでなければ何もありません。

サブプロセスを使用して、Pythonコード内から、そのnetstatが返すもので「LISTEN」を探してMySQLが起動しているかどうかを確認し、次のようにします。

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にあるとき...私は1ワードの引数(「df」としましょう)を使用します–それは問題なく動作します。引数が1語を超える場合(つまり、「df -h /」、またはここで「sudo netstat -tap | grep mysql」のように)、この「そのようなファイルまたはディレクトリはありません」というエラーが発生します。

また、関連する質問(#2)で、このコマンドをコマンドラインで実行すると、rootパスワードを要求されることがあります。Pythonスクリプトからパスワードを渡すにはどうすればよいですか?

4

2 に答える 2

2

これを並べてみてください。

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を実行し、すべてのデータを収集することです。次に、そのサブプロシージャのstdoutを次のサブプロシージャのstdinとして使用し、そこでgrepを実行します。

これはubuntu12.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."
于 2012-10-27T23:20:46.810 に答える
0

Pythonで接続できるかどうかだけを確認してみませんか?

try:

    con = _mysql.connect('localhost', 'user', 
        'password', 'testdb')

except _mysql.Error, e:

print "Error %d: %s" % (e.args[0], e.args[1])
sys.exit(1)
于 2012-10-28T13:55:19.677 に答える