python打造多台電腦同步編輯代碼工具,你能想到什麼辦法?

python打造多臺電腦同步編輯代碼工具,你能想到什麼辦法?

因為需要在不同的電腦上同步代碼,所有特別思考了一下這個主題。

本來使用 VB 或者網頁的方法也不是不能做,不過考慮到很久都放著的 python 學習計劃,就決定用 python 來做了。

(私信小編007即可獲取Python視頻教程以及各類PDF!)

那麼,首先考慮一下實現網絡傳輸的方式,

嗯,據我所知的,兩種吧。

TCP 或者 UDP

考慮到我兩臺電腦都在一個局域網之內。

就直接選擇 UDP 這種“不是很可靠的方式了”

ch1.使用 udp 的通訊方法:

首先導入 socket 庫,根據 socket 庫的說明,使用 socket.AFINET 參數和 socket.SOCK_DGRAM 參數實現:

s = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)

之後。

綁定端口:

s.bind(('', 9999))

這個時候已經可以用 socket.Sendto() 發送信息 和

# 一直在監聽

while True:

# 接收數據 自動阻塞 等待客戶端請求:

data, addr = s.recvfrom(2048)

print 'Received from %s:%s.' % addr

print 'get: %s' %data

使用如上的代碼接收信息。

python打造多臺電腦同步編輯代碼工具,你能想到什麼辦法?

ch2.用戶界面。

命令行對我來說自然是相當不夠的,為了給它加上窗口,按鈕等,我不得不使用一套 UI 庫,這裡是 比較常用的 Tkinter ,稍微摸清楚彼此的脾氣之後,做出瞭如下的界面。

python打造多臺電腦同步編輯代碼工具,你能想到什麼辦法?

為了修改 Text 中的值,還製作了一個 ModeText(text, cText) 事件:

def modText(t, atext):

t.delete(1.0, tk.END)

t.insert(1.0, atext)

其實也很簡單,就是清空 Text 內容後,然後插入自己的內容——直接修改的命令?我似乎是沒找到,然後獲取文本的方法,是 Text.get(開始,結束)

如此以後,基本的用戶界面算是完成了,不過很快就遇到了問題,在執行用戶界面到 mainloop() 的時候,接收數據的部分如何執行呢?

ch3.線程的控制

為了解決用戶界面和接收信息循環同時並存的問題,就需要用到線程(這裡是 Threading 庫),

線程的適用方法,大體上是改寫了 線程的 run 事件,將 接收信息的模塊放到 線程中去,

改寫 run 事件如下:

def run(self):

Receive(self.s, self.vEdit)

這裡的 self.s 就是 socket, 而 self.vEdit 就是負責顯示文本的文本框(Text),

通過將 self.vEdit 傳入,進行文本的發送和接收顯示。

接下來,給剪貼板增加一些其他的功能。比如發現接受到的是網址就打開瀏覽器,接收到特殊格式的命令,直接操作電腦等等。

ch4.一些擴展的周邊

ch4.1. 操作剪貼板

使用 pyperclip 的庫,簡單地就可以操作剪貼板,

pyperclip.paste()

pyperclip.copy('text to run')

後面我發現其實使用 tkinter 自帶的功能也可以實現操作剪貼板,

在 python2 中來說 ,還沒有 字符編碼的問題。

ch4.2. 正則判斷

正則判斷基本就是用 re 實現的,這沒什麼好說的,判斷網址:

# 對網址的處理

if re.match(r'^https?:/{2}\w.+$', data):

print "It's a url"

ch4.3. 打開瀏覽器:

這個也很簡單,使用 webbrowser 庫

webbrowser.open(url)

ch5.需要解決的問題(已經解決)

前面所說的線程有一個問題,就是當窗口退出的時候,線程並不會結束,

經過一番搜索,嗯,掙扎,總算找到了問題的突破點,就是關閉窗口的事件,

Tkinter 關閉窗口的事件是這個 :

tk.protocol("WM_DELETE_WINDOW", on_closing)

然後定義 on_closing 事件,在其中加入強制關閉的命令:

os._exit(0)

(哈哈,當然你首先要 import os)

為什麼不用 sys.exit(0) ? 這個你可以自己嘗試一下。

然後有個問題,就是判斷 目標 ip 地址是否存在,聰明的你應該知道怎麼辦 =)

python打造多臺電腦同步編輯代碼工具,你能想到什麼辦法?



分享到:


相關文章: