我需要一种将命令吐出到不需要可打印字符的telnet设备的工具,例如回车符和换行符。在python本身中,这是通过以下类似方式实现的。...
myDevice.send(b'command\n\r')
这将导致9个字节发送到设备。
我想在Tkinter输入框中输入这样的字符串。但是,Tk输入框似乎太聪明了,无法使用\,所以每次引入\ r \ n或\ x0a等时,我总是得到\\。换句话说,它总是可打印的。
我一直在不停地尝试将结果字符串转换成我需要的字符串,但是却没有喜悦。我在下面提供了一个小例子来说明问题。
from tkinter import *
def show_entry_fields():
print(e1.get().encode())
def show_string():
myString = b'hello\n'
print(myString)
master = Tk()
Label(master, text="Enter string with \\n").grid(row=0)
e1 = Entry(master)
e1.insert(10,"enter with escape char")
e1.grid(row=0, column=2)
Button(master, text='Quit', command=master.quit).grid(row=3, column=0, sticky=W, pady=4)
Button(master, text='Show Entry', command=show_entry_fields).grid(row=3, column=1, sticky=W, pady=4)
Button(master, text='Show myString', command=show_string).grid(row=3, column=2, sticky=W, pady=4)
mainloop( )
在tk输入框中输入以下内容:
'hello\n'
这是印刷品的结果:
b'hello\\n'
我真正想看到的是:
b'hello\n'
一旦发送到设备,它就只有6个字节。
答案 0 :(得分:1)
以下内容适用于所有字符,包括\n
,\r
,\t
和\x00 - \xff
print(e1.get().encode('latin-1').decode('unicode_escape').encode('latin-1'))
答案 1 :(得分:0)
尝试以下代码:
import ast
def show_entry_fields():
print(ast.literal_eval(f'b"{e1.get()}"'))
这将以字节字面量评估Entry的内容。请注意,它要求"
被转义为\"
。