我的 Python 应用程序连接到 MSSQL 数据库以验证一些事项编号,但此步骤仅用于协助数据完整性,不会为用户带来任何附加功能。
只有在我办公室的本地网络上才能访问该数据库。如何在启动过程中检查用户的环境以查看是否可以建立此连接?
我正在使用 pyodbc,但我还需要这个程序在 OS X 上工作,所以我不会导入那个模块,直到这个检查返回一个肯定的结果。有任何想法吗?
在导入前使用 ping 验证主机是否可用:
import subprocess
host = "<hostname>"
# add sample text for ping resolution errors here
errors = ("could not find", "unreachable")
ping = "ping {0}".format(host)
(stdout, stderr) = subprocess.Popen(ping, stdout=subprocess.PIPE).communicate()
# stdout is a byte string and must be decoded before compare
if not any(error in stdout.decode("utf-8") for error in errors):
import pyodbc
.....
你可以尝试这样的事情:
#!/usr/bin/python
import socket
mssql_server = 'foobar.example.not' # set this to your own value
s = socket.socket()
s.settimeout(3)
try:
server = [x for x in socket.getaddrinfo(mssql_server,1433) if x[0]==2 ][0][-1]
except socket.gaierror:
server = None
if server:
try:
s.connect(server)
except (socket.timeout, socket.error):
server = None
s.close()
...这应该尝试为您的服务器查找 IPv4 地址(使用返回的第一个地址getaddrinfo()
),然后尝试连接到该系统上的 MS SQL TCP 端口(默认为 1433)。(是的,如果您的服务器在不同的端口上,请更改 1433)。如果尝试时报告超时或任何其他套接字错误,则 server 设置为None
. 否则,您可能拥有可以访问的 MS SQL 服务器。