簡體   English   中英

Pyserial無法像linux shell一樣寫入tty

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM