【发布时间】:2015-10-13 12:21:51
【问题描述】:
我为嵌入式设备实现了一个串行协议,并调试了我在主机 [Widows 7 MinGW] 上编译的代码,只需使用标准输入和标准输出进行通信,现在我想使用虚拟零调制解调器电缆。
我认为编写一个 python3 脚本并不难,它完全可以获取程序的标准输出并将其转发到串行链接,同时将串行数据发送到标准输入,但是,我无法得到它跑步。这是我最好的尝试[我用 cat 替换了我的可执行文件]:
import subprocess
import serial
import threading
def forward_to_serial():
while True:
ser.write(proc.stdout.read())
def forward_to_cmd():
while True:
proc.stdin.write(ser.read())
proc.stdin.flush()
ser = serial.Serial('COM27', timeout = 100)
proc = subprocess.Popen("cat", stdout=subprocess.PIPE, stdin=subprocess.PIPE)
fwc = threading.Thread(target = forward_to_cmd)
fwc.start()
forward_to_serial()
它不起作用可能是由于两个活动线程访问 Popen 对象。当我将问题减少到仅将数据从串行链接转发到 Popen 对象时,它会按预期工作
proc = subprocess.Popen("cat", stdin=subprocess.PIPE)
fwc = threading.Thread(target = forward_to_cmd)
fwc.start()
#forward_to_serial()
有没有办法让它工作?
【问题讨论】:
-
如果
ser.fileno()返回一个真实的文件描述符,然后尝试直接将它作为stdout参数传递,即,将中间人(Python)重定向子进程的标准输出直接剪切到串行。
标签: python subprocess python-multithreading pyserial