如何使用 Python Telnet 收集连续数据
How to collect continuous data with Python Telnet
我有一个 python 脚本可以通过 Telnet 会话连接到电源。脚本流程如下:
# Connect to Device
tn = telnetlib.Telnet(HOST,PORT)
# Turn On
tn.write("OUT 1\r")
# Get Current Voltage
current_voltage = tn.write("MV?\r")
# Turn Off
tn.write("OUT 0\r")
我想做的是能够每 t 毫秒 (ms) 获取当前电压,并能够在我的 Tkinter GUI 上显示它,直到设备被命令关闭。理想情况下,我想在图表上显示它,这样我就有了电压与时间的关系,但我现在只能接受动态文本显示。 current_voltage
变量将存储表示当前电压值的字符串。我能做到这一点的最好方法是什么?谢谢
每毫秒可能超过 tkinter 可以处理的时间。这有点取决于获取电压的成本。如果它花费的时间超过一毫秒,您将需要线程或多处理。
最简单的解决方案是使用 after
安排每毫秒检索一次数据,不过我不确定它能否跟上。问题是事件循环需要时间来处理事件,并且在它不获取电压时给它这么小的 window 时间可能会导致 GUI 滞后。
一般的技术是写一个函数做一些工作,然后调用 after
以便将来再次调用它自己。
例如:
root = tk.Tk()
...
def get_voltage():
<your code to get the voltage goes here>
# get the voltage again in one millisecond
root.after(1, get_voltage)
...
get_voltage()
root.mainloop()
另一种选择是使用线程,其中您有一个线程,它除了获取电压信息并将其放入队列外什么都不做。然后,使用与上述相同的技术,您可以从队列中拉出最新的电压以供显示。
我有一个 python 脚本可以通过 Telnet 会话连接到电源。脚本流程如下:
# Connect to Device
tn = telnetlib.Telnet(HOST,PORT)
# Turn On
tn.write("OUT 1\r")
# Get Current Voltage
current_voltage = tn.write("MV?\r")
# Turn Off
tn.write("OUT 0\r")
我想做的是能够每 t 毫秒 (ms) 获取当前电压,并能够在我的 Tkinter GUI 上显示它,直到设备被命令关闭。理想情况下,我想在图表上显示它,这样我就有了电压与时间的关系,但我现在只能接受动态文本显示。 current_voltage
变量将存储表示当前电压值的字符串。我能做到这一点的最好方法是什么?谢谢
每毫秒可能超过 tkinter 可以处理的时间。这有点取决于获取电压的成本。如果它花费的时间超过一毫秒,您将需要线程或多处理。
最简单的解决方案是使用 after
安排每毫秒检索一次数据,不过我不确定它能否跟上。问题是事件循环需要时间来处理事件,并且在它不获取电压时给它这么小的 window 时间可能会导致 GUI 滞后。
一般的技术是写一个函数做一些工作,然后调用 after
以便将来再次调用它自己。
例如:
root = tk.Tk()
...
def get_voltage():
<your code to get the voltage goes here>
# get the voltage again in one millisecond
root.after(1, get_voltage)
...
get_voltage()
root.mainloop()
另一种选择是使用线程,其中您有一个线程,它除了获取电压信息并将其放入队列外什么都不做。然后,使用与上述相同的技术,您可以从队列中拉出最新的电压以供显示。