2013-04-20 104 views
1

我刚开始使用psycopg2模块来访问本地PostgreSQL服务器,我想用一种方法来检查服务器是否已经启动,以便我的程序可以处理错误当我尝试启动服务器:Python/PostgreSQL - 检查服务器是否正在运行

psqldir = 'C:/Program Files/PostgreSQL/9.2/bin' # Windows 
username = os.environ.get('USERNAME') 
dbname = 'mydb' 
os.chdir(psqldir) 
os.system('pg_ctl start -D C:/mydatadir') # Error here if server already started 
conn = psycopg2.connect('dbname=' + dbname + ' user=' + username) 
cur = conn.cursor() 

我尝试了一点,似乎这将返回一个“0”或“3”,这将解决我的问题,但我没有找到关于任何信息PostgreSQL/psycopg2手册,以确认这是否是有记录的行为:

server_state = os.system('pg_ctl status -D C:/mydatadir') 

Wh在最好的方式?谢谢!

+2

使用子进程模块而不是os.system。当然:获得命令的输出...很容易解析相关字符串的输出结果... – 2013-04-20 05:28:34

+1

@PrincessOftheUniverse'subprocess'肯定是正确的路要走,但我强烈反对你的建议的其他部分。在输出中解析字符串通常不明智; ephedyn通过测试返回值来采取正确的方法。在第一次有人为其计算机配置了俄语或泰语或...尝试运行您的程序并且字符串不再匹配时,字符串解析会严重叮咬您。或者有人在更新版本中进行错字修正或措辞澄清。这是一个不好的习惯,应该是最后的手段。 – 2013-04-20 10:05:05

回答

3

the pg_ctl documentation

-w

等待启动或者关闭的完成。等待是关机的默认选项,但不是初创公司。当等待 启动时,pg_ctl反复尝试连接到服务器。当 等待关机时,pg_ctl将等待服务器删除其PID 文件。 pg_ctl根据启动 或关机的成功返回退出代码。一个服务器是否在指定的数据 目录中运行

status模式检查:

你还会发现pg_ctl status有用。如果是,则显示用于调用它的PID和命令行选项 。如果服务器未运行,则 进程返回退出状态3.

+0

正是我需要的,谢谢!还注意到您之前的评论中的其他一些有用的提示 - 正确提出了正确的提示。 – elleciel 2013-04-21 14:13:54

相关问题