Python/PostgreSQL - 检查服务器是否正在运行

ell*_*iel 3 python postgresql psycopg2

我刚刚开始使用 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()
Run Code Online (Sandbox Code Playgroud)

我做了一些实验,似乎这返回了“0”或“3”,这可以解决我的问题,但我没有在 PostgreSQL/psycopg2 手册上找到任何信息来确认这是否是记录在案的行为:

server_state = os.system('pg_ctl status -D C:/mydatadir')
Run Code Online (Sandbox Code Playgroud)

最好的办法是什么?谢谢!

Cra*_*ger 5

来自pg_ctl documentation

-w

等待启动或关闭完成。等待是关机的默认选项,但启动时则不然。当等待启动时​​,pg_ctl 会重复尝试连接到服务器。当等待关闭时,pg_ctl 等待服务器删除其 PID 文件。pg_ctl 根据启动或关闭是否成功返回退出代码。

您还会发现pg_ctl status有用的:

status模式检查服务器是否正在指定的数据目录中运行。如果是,则会显示 PID 和用于调用它的命令行选项。如果服务器未运行,则进程返回退出状态 3。