我刚刚开始使用psycopg2模块来访问本地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')
什么是最好的方法?谢谢!
subprocess
肯定是正确的方式,但我强烈不同意你建议的另一部分。通常在输出中解析字符串是不明智的;ephedyn采用测试返回值的正确方法。当使用者的计算机配置为俄语、泰语或其他语言时,字符串解析将会出现问题,程序无法匹配。或者当有人在更新版本中修复拼写错误或修改措辞时,同样会导致问题。这是一个应该避免的糟糕做法,应该作为最后的手段。 - Craig Ringer