我正在運行一個腳本,該腳本的telnet爲terminal server
。偶爾當一個實例已經在運行,這將導致已經運行腳本失敗與檢查套接字是否在python中使用
EOFError: telnet connection closed
腳本啓動是否有一個快速和容易pythonic
的方法來檢查,如果需要的插座已在使用上客戶端電腦在我嘗試打開與telnetlib
的連接之前?
SOLUTION:
我想避免一個子進程調用但因爲我沒有在客戶端計算機上控制軟件和其他程序可以使用相同的插槽,下面的文件鎖的建議(好主意)不會爲我工作。我結束了使用SSutrave的建議。下面是使用netstat命令在Windows 7我的工作代碼:
# make sure the socket is not already in use
try:
netstat = subprocess.Popen(['netstat','-nao'],stdout=subprocess.PIPE)
except:
raise ValueError("couldn't launch netstat to check sockets. exiting")
ports = netstat.communicate()[0]
if (ip + ':' + port) in ports:
print 'socket ' + ip + ':' + port + ' in use on this computer already. exiting'
return
我遇到的問題不在服務器端。這是意外地在同一臺客戶機上運行腳本兩次。我的腳本調用'tn = telnetlib.Telnet(host = 10.10.10.15,port = 8001)'。如果腳本在第一次關閉之前再次運行。第一個實例獲取'EOFError:telnet連接關閉'。 – MrPat
@MrPat這是一個服務器端問題,因爲當新服務器到達時,服務器關閉已經存在的連接。你可以用文件鎖來解決這個問題(在腳本運行的時候創建一個文件,並且在開始時,如果文件存在,它不做任何事情就完成了)。 –
不幸的是,這肯定是客戶端問題:如果我在計算機A上運行腳本,然後在A仍在運行時在計算機B上運行腳本,則B的連接嘗試會被服務器拒絕,並且A繼續工作良好。但是,如果我在計算機A上運行腳本(稱爲A1),然後在A上運行腳本(稱爲A2),則A1失敗,並且A2開始新的連接。 A2也會失敗,但是原因不同。 – MrPat