我剛開始使用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