㈠ 如何用python實現串口通信
Python非常適合寫一些測試的腳本,如快速的串口通信測試等。如果使用VC++ QT開發,可能用時較多,使用python,如果掌握使用方法,可以直接讀寫測試,配合設備或是串口助手,很快驗證與實現。
Python有沒有現成的串口API直接調用呢?經過實踐驗證,需要安裝一個叫 Pyserial的組件即可。這個可以在github上下載。
在windows 7 64bit 上可以使用嗎?當然可以使用,我安裝的python3.5為64位的。把下載後的文件,其中有一個serial的文件夾,拷貝到python35安裝路徑, C:\Python35\Lib\site-packages\serial
網上可以搜一下windows的安裝包,安裝完也是:C:\Python35\Lib\site-packages\serial ,可以用最新的版本,替換即可。
測試的方法:在python IDE里測試:
>>> import serial
這里如果報錯,是python版本與pyserial版本沒有配合好。如果正常,不返回,即可以導入serial模塊。
>>> ser=serial.Serial("COM5",115200)
這里為COM5,115200的波特率。如果打不開,請檢查安裝環境。
>>> ser.write('hello,serial test'.encode())
17
發送測試(如果返回位元組數,說明返回成功),這里需要轉換一個編碼為位元組。
以上測試,可以使用現在的設備或是串口助手,如安裝Virtual Serial Port Driver 7.2 虛擬串口軟體,設置一對串口,進行自發自收的測試。
>>> print(ser.readline())
b'abcdefg\r\n'
這里是串口接收,有接收的超時。設備或是串口助手發送一個字元串,以回車換行結束,這里就可以收到列印出來。
也可以用ser.read(),這里只接收一個字元來實現。
上面已經實現了基本的串口操作。
關閉串口為:
>>> ser.close()
如果使用python,一般寫個py文件,就像windows bat 批處理一樣,這是python強大的地方。如果寫一個py腳本呢?其實只要把上面的命令,一條條寫下來,就是一個腳本,測試如下:
import serialser=serial.Serial("COM5",115200,timeout=0.5)for i in range(0,100-1):ser.write('hello\r\n'.encode())print(ser.readline());ser.close()
㈡ xdm,,pythonsocket一台電腦可以通信,兩台電腦
xdm,pythonsocket一台電腦可以通信兩台電腦。使用python的socket編程實現兩台電腦之間的通信可以使用兩種方式完成。python開發簡單socket程序在兩台電腦之間傳輸消息,分為客戶端和服務端,分別在兩台電腦上運行後即可進行簡單的消息傳輸,也可在一台電腦上測試,設置兩個不同的埠。
㈢ 如何實現Python與javascript通信
程序需要python和js混合編程,如何在python獲取js中變數的值。
是web的話,用http通信就好了
用python selenium吧,通過selenium代理python和瀏覽器之間的通信。
如果非要糾結是否遠程調用而不是本地數據調用,可以試試PyQt4,
裡面有一個QWebKit模塊(最新版本的PyQt5去掉Webkit了用的另外一個模塊),
PyQt5和PyQt4功能雷同,可以認為是2個分支
Webkit裡面有Python和JS的交互,甚至你可以用PyQt4做一個瀏覽器
㈣ Python3 & TCP協議和UDP協議的特點和區別
優點:
(1)TCP是面向連接的運輸層協議;
(2)每一條TCP連接只能有兩個端點(即兩個套接字),只能是點對點的;
(3)TCP提供可靠的傳輸服務。傳送的數據無差錯、不丟失、不重復、按序到達;
(4)TCP提供全雙工通信。允許通信雙方的應用進程在任何時候都可以發送數據,因為兩端都設有發送緩存和接受緩存;
(5)面向位元組流。雖然應用程序與TCP交互是一次一個大小不等的數據塊,但TCP把這些數據看成一連串無結構的位元組流,它不保證接收方收到的數據塊和發送方發送的數據塊具有對應大小關系,例如,發送方應用程序交給發送方的TCP10個數據塊,但就受訪的TCP可能只用了4個數據塊久保收到的位元組流交付給上層的應用程序,但位元組流完全一樣。
缺點:
慢,效率低,佔用系統資源高,易被攻擊 TCP在傳遞數據之前,要先建連接,這會消耗時間,在數據傳遞時,確認機制、重傳機制、擁塞控制機制等都會消耗大量的時間,而且要在每台設備上維護所有的傳輸連接。事實上,每個連接都會佔用系統的CPU、內存等硬體資源。因為TCP有確認機制、三次握手機制,這些也導致TCP容易被人利用,實現DOS、DDOS、CC等攻擊。
TCP的應用場景:
當對網路通訊質量有要求的時候。例如:整個數據要准確無誤的傳遞給對方,這往往用於一些要求可靠的應用。如:用於文件傳輸(FTP HTTP 對數據准確性要求高,速度可以相對慢),發送或接收郵件(POP IMAP SMTP 對數據准確性要求高,非緊急應用),遠程登錄(TELNET SSH 對數據准確性有一定要求,有連接的概念)等等。
優點:
(1)UDP是無連接的傳輸層協議;
(2)UDP使用盡最大努力交付,不保證可靠交付;
(3)UDP是面向報文的,對應用層交下來的報文,不合並,不拆分,保留原報文的邊界;
(4)UDP沒有擁塞控制,因此即使網路出現擁塞也不會降低發送速率;
(5)UDP支持一對一一對多多對多的交互通信;
(6)UDP的首部開銷小,只有8位元組.
缺點:
不可靠,不穩定。 因為UDP沒有TCP那些可靠的機制,在數據傳遞時,如果網路質量不好,就會很容易丟包。
UDP的應用場景:
當對網路通訊質量要求不高的時候,要求網路通訊速度能盡量的快,這時就可以使用UDP。 UDP一般用於即時通信(QQ聊天 對數據准確性和丟包要求比較低,但速度必須快),在線視頻(RTSP 速度一定要快,保證視頻連續,但是偶爾花了一個圖像幀,人們還是能接受的),網路語音電話(VoIP 語音數據包一般比較小,需要高速發送,偶爾斷音或串音也沒有問題)等等。
(1)TCP面向連接(如打電話要先撥號建立連接);UDP是無連接的,即發送數據之前不需要建立連接
(2)TCP提供可靠的服務。也就是說,通過TCP連接傳送的數據,無差錯,不丟失,不重復,且按序到達;UDP盡最大努力交付,即不保證可靠交付
(3)TCP面向位元組流,實際上是TCP把數據看成一連串無結構的位元組流;UDP是面向報文的UDP沒有擁塞控制,因此網路出現擁塞不會使源主機的發送速率降低(對實時應用很有用,如IP電話,實時視頻會議等)
(4)每一條TCP連接只能是點到點的;UDP支持一對一,一對多,多對一和多對多的交互通信
(5)TCP首部開銷20位元組;UDP的首部開銷小,只有8個位元組
(6)TCP的邏輯通信信道是全雙工的可靠信道,UDP則是不可靠信道
HTTP、HTTPS、FTP、TELNET、SMTP(簡單郵件傳輸協議)協議基於可靠的TCP協議。TFTP、DNS、DHCP、TFTP、SNMP(簡單網路管理協議)、RIP基於不可靠的UDP協議
㈤ plc與python之間實現通信
python語言與plc建立串口通信時,無法直接讀寫。
用到python的serial 模塊
在創建串口對象時需要定義其屬性與plc一致:
self.main_engine.baudrate = self.bps
self.main_engine.bytesize = 7
self.main_engine.parity = 'E'
self.main_engine.stopbits = 2
重點:在寫入數據後,需要寫16進制數"0D",結束標志位
self.main_engine.write("@00WD1010000152*".encode())
self.main_engine.write(binascii.a2b_hex("0D"))
㈥ python 兩個腳本同時執行,並且 互相通信
importsys,threading,queue
ifsys.version_info.major==3:
defexecfile(filename,globals=None,locals=None):
g=globalsifglobalsisnotNoneelse__builtins__.globals()
l=localsiflocalsisnotNoneelse__builtins__.locals()
withopen(filename)asf:
code=compile(f.read(),filename,'exec')
exec(code,g,l)
if__name__=='__main__':
f1='/path/to/file1.py'#MainThread
f2='/path/to/file2.py'
#將需要共享的變數放入全局變數字典,在f1和f2中可以直接使用q1和q2兩個隊列
#f1向f2發送消息:
#f1:q1.put(something)
#f2:q1.get()
#f2向f1發送消息:
#f2:q2.put(something)
#f1:q2.get()
g={'q1':queue.Queue(),'q2':queue.Queue()}
g.update(globals())
thread=threading.Thread(target=execfile,args=(f2,),kwargs={'globals':g})
thread.start()
execfile(f1,globals=g)
thread.join()
㈦ 利用Python語言,設計一個網路聊天程序oswa實現網路通信或者文件傳輸
你是要外網通信還是只在內網通信,如果外網需要先做埠映射或者租伺服器
㈧ 怎麼利用Python做一個即時通信軟體呢,類似於QQ,能實現基本的聊天和文件傳輸功能
這個基本的聊天就是最基本的socket操作,python界面方面比較弱勢,如果不用第三方庫的話。
㈨ 如何實現python和telnet通信
一、Windows下開啟Telnet服務
(詳見:與Win7防火牆無縫結合 Telnet功能測試)
1、Windows 2000/XP/2003/Vista:默認已安裝但禁止了Telnet服務
(1)開啟Telnet:運行services.msc打開服務管理,找到Telnet服務項設置其啟動類型為「自動」或者「手動」(更安全,只在需要的時候才啟用),然後啟動該服務即可。
2、Windos 7:默認未安裝Telnet服務
(1)安裝Telnet:依次點擊「開始」→「控制面板」→「程序」,「在程序和功能」找到並點擊「打開或關閉Windows 功能」進入Windows 功能設置對話框。找到並勾選「Telnet客戶端」和「Telnet伺服器」,最後「確定」稍等片刻即可完成安裝。
(2)開啟Telnet:方法同1中的(1)
二、Linux下開啟Telnet服務
(詳見:Ubuntu 10.10 下配置Telnet伺服器)
(1)安裝telnetd(即telnet-server):apt-get install telnetd
(2)安裝xinetd(telnet-server的運行需要由xinetd來管理):apt-get install xinetd
(3)配置telnet文件:vi /etc/xinetd.d/telnet
(4)開啟xinetd:service xinetd start
三、使用Python實現Telnet遠程登錄
Python中專門提供了telnetlib庫,用來完成基於telnet協議的通信功能。
㈩ 用python 怎麼和硬體進行鏈接,通信,交互
本文介紹了用python與文件進行交互的方法,分享給大家,具體如下:
一.文件處理
1.介紹
計算機系統:計算機硬體,操作系統,應用程序
應用程序無法直接操作硬體,通過操作系統來操作文件,進而讀/寫硬體中的文件。
python打開文件過程:
#打開
f=open('a.txt','r')
#通過句柄對文件進行操作
read_f=f.read()
#關閉文件
f.close()
with open('a.txt','r') as f: #不需要關閉
f.close() #回收操作系統打開的文件
del f #回收應用程序級的變數
2.打開文件的模式
a.打開文本文件
#r,只讀模式【默認模式,文件必須存在,不存在則拋出異常】
f=open('a.txt',encoding='utf-8')
data1=f.read()
print(f.readline(),end='')
print(f.readlines())
#w,只寫模式【不可讀;不存在則創建;存在則清空內容】
f=open('a.txt','w',encoding='utf-8')
f.write('werf')
#a,只追加寫模式【不可讀;不存在則創建;存在則只追加內容】
f=open('a.txt','a',encoding='utf-8')
f.write('werf\n')
b.對於非文本文件,只能使用b模式,"b"表示以位元組的方式操作(而所有文件也都是以位元組的形式存儲的,使用這種模式無需考慮文本文件的字元編碼、圖片文件的jgp格式、視頻文件的avi格式
with open('1.jpg','rb') as f_read:
data=f_read.read()
print(data)
with open('a.txt','rb') as f_read:
data=f_read.read().decode('utf-8') #解碼
print(data)
with open('a.txt','wb')as f_write:
f_write.write('adsf'.encode('utf-8'))
'''
練習,利用b模式,編寫一個cp工具,要求如下:
1. 既可以拷貝文本又可以拷貝視頻,圖片等文件
2. 用戶一旦參數錯誤,列印命令的正確使用方法,如usage: cp source_file target_file
'''
import sys
if len(sys.argv)!=3:
print('usage:cp source_file target_file')
sys.exit()
source_file,target_file=sys.argv[1],sys.argv[2]
print()
with open(source_file,'rb')as f_read,open(target_file,'wb')as f_write:
for line in f_read:
f_write.write(line)
3.文件內游標的移動
#以文本模式讀文件,n代表的是字元的個數
with open('a.txt','r')as f_read:
data=f_read.read(6)
print(data)
#以b模式讀文件,n代表的是位元組的個數
with open('a.txt','rb')as f_read:
data=f_read.read(6)
print(data)
# tell:告訴當前游標的位置
with open('a.txt','r',encoding='utf-8')as f_read:
data=f_read.read(4)
data1=f_read.tell()
print(data,data1)
# seek:移動游標(0:文件開頭默認;1:文件當前游標;2:文件末尾)
with open('a.txt', 'r', encoding='utf-8')as f_read:
data = f_read.seek(3)
data1 = f_read.read()
print(data, data1)
# 實現tail功能
import time
with open('access.log', 'rb')as f_read:
f_read.seek(0,2)
while True:
line = f_read.readline()
if line:
print(line.decode('utf-8'),end='')
else:
time.sleep(1)
4.文件的修改
import os
with open('a.txt') as read_f,open('.a.txt.swap','w') as write_f:
for line in read_f:
line=line.replace('alex','SB')
write_f.write(line)
os.remove('a.txt')
os.rename('.a.txt.swap','a.txt')