2014-06-29 132 views
1

我的Python應用程序連接到MSSQL數據庫以驗證某些問題編號,但此步驟僅用於幫助數據完整性並且不會爲用戶提供任何其他功能。檢查用戶的網絡環境 - Python應用程序

數據庫只能在辦公室的本地網絡上訪問。如何在啓動過程中檢查用戶的環境以查看是否可以建立連接?

我使用的是pyodbc,但我也需要這個程序才能在OS X上工作,所以我不會導入那個模塊,直到這個檢查返回一個肯定的結果。有任何想法嗎?

回答

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服務器。

+0

這將是我的備份計劃,如果我不能得到熊熊的工作答案。謝謝吉姆。 – rchav9

+0

您的問題標籤指示SQL Server,它很可能在默認端口1433上運行。 – Bryan

+0

啊。我的錯誤,我剛剛回答了一個不同的問題,那就是MySQL而不是MS SQL。 –

0

驗證主機可用使用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 
    ..... 
+0

我認爲這會奏效!我明天將在工作中測試它,看看它是如何發展的。感謝您的幫助,呃! – rchav9

相關問題