2013-04-20 134 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

相關問題