我刚开始使用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在最好的方式?谢谢!
使用子进程模块而不是os.system。当然:获得命令的输出...很容易解析相关字符串的输出结果... – 2013-04-20 05:28:34
@PrincessOftheUniverse'subprocess'肯定是正确的路要走,但我强烈反对你的建议的其他部分。在输出中解析字符串通常不明智; ephedyn通过测试返回值来采取正确的方法。在第一次有人为其计算机配置了俄语或泰语或...尝试运行您的程序并且字符串不再匹配时,字符串解析会严重叮咬您。或者有人在更新版本中进行错字修正或措辞澄清。这是一个不好的习惯,应该是最后的手段。 – 2013-04-20 10:05:05