[英]Pyserial cannot write to tty like the linux shell
我可以在linux shell中使用以下命令通過UART與設備通信:
echo 'CMD' > /dev/ttyPS1
我嘗試使用Pyserial模塊在Python中重新創建此操作,但沒有任何反應。 我嘗試在.py文件以及2.7解釋器內部使用它(以防出現時序延遲問題)。
import serial
ser = serial.Serial('/dev/ttyPS1', 115200)
ser.write('CMD')
有趣的是……運行python代碼段后,我無法使用linux shell寫入設備。 stty向我顯示Pyserial已為設備添加了許多選項。 如果清除這些額外選項,則可以使用linux shell與設備再次通訊。
在使用Python腳本之前:
>>> stty -F /dev/ttyPS1
speed 115200 baud; line = 0;
-brkint -imaxbel
在Python腳本之后:
>>> stty -F /dev/ttyPS1
speed 115200 baud; line = 0;
min = 0; time = 0;
-brkint -icrnl -imaxbel
-opost -onlcr
-isig -icanon -iexten -echo -echoe -echok -echoctl -echoke
為什么會發生這種現象? 有沒有辦法使Pyserial像linux shell一樣工作?
如果你真的想pyserial
打開設備文件,而不改變那些標志,或者明確地使它改變標志,以准確的數值,他們已經有了,你也許可以做到這一點與一堆選項參數的構造函數 ,或者可能通過在構造后設置一些屬性或調用一些方法。
但是為什么要這么做呢?
如果只想執行echo
的等效操作,則只需執行shell和echo
命令的操作即可:將設備文件作為文件打開並寫入。
因此,其中之一:
with open('/dev/ttyPS1', 'wb') as ps1:
ps1.write(b'CMD')
with open('/dev/ttyPS1', 'wb', buffering=0) as ps1:
ps1.write(b'CMD')
with open('/dev/ttyPS1', 'wb') as ps1:
ps1.raw.write(b'CMD')
ps1 = os.open('/dev/ttyPS1', os.O_WRONLY)
os.write(ps1, b'CMD')
os.close(ps1)
如果您使用的是Python 2.x,則不需要b
前綴,也沒有.raw
,但是其他情況類似:
with open('/dev/ttyPS1', 'wb') as ps1:
ps1.write('CMD')
with open('/dev/ttyPS1', 'wb', 0) as ps1:
ps1.write('CMD')
ps1 = os.open('/dev/ttyPS1', os.O_WRONLY)
os.write(ps1, 'CMD')
os.close(ps1)
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.