检查用户的网络环境 - Python应用程序

时间:2014-06-29 14:20:16

标签: python windows macos pyodbc pymssql

我的Python应用程序连接到MSSQL数据库以验证某些事项编号,但此步骤仅用于协助数据完整性,并且不会为用户带来任何其他功能。

只有在我办公室的本地网络上才能访问数据库。如何在启动期间检查用户的环境以查看是否可以建立此连接?

我正在使用pyodbc,但我还需要这个程序才能在OS X上运行,所以我不会导入该模块,直到此检查返回肯定结果。有任何想法吗?

2 个答案:

答案 0 :(得分:0)

导入前验证主机是否可用:

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
    .....

答案 1 :(得分:0)

您可以尝试这样的事情:

#!/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)。如果尝试报告超时或任何其他套接字错误,则服务器设置为None。否则,您可能有一个可以访问的MS SQL服务器。