我试图让Ardinput进入if "(Ardinput == stagecode):"
,但似乎Ardinput丢失了它的内容
这是代码
的输出Start capture
b'STAGE\r\n'
STAGE
Befor CR
STAGE
代码:
url = config.url()
stagecode = "STAGE "
ser = serial.Serial(
port='COM3',
baudrate=9600,
)
def stage():
urllib.request.urlopen(url + 'f.stage')
def capture():
global Ardinput
print ("Start capture")
while (1):
line = ser.readline()
if (line != ""):
print (line)
Ardinput = line
Ardinput = Ardinput.decode("utf-8")
print (Ardinput + ' Befor CR')
Ardinput = Ardinput[:-1]
print (Ardinput)
if (Ardinput == stagecode):
print (stagecode + ' IN IF FUNCTION')
stage()
capture()
答案 0 :(得分:1)
您只删除了\n
换行符,但保留了\r
回车符。
使用str.strip()
代替从开头和结尾删除所有空格:
Ardinput = line.decode('utf8').strip()
并从stagecode
中删除空格:
stagecode = "STAGE"
为了将来参考,如果您使用repr()
或甚至ascii()
函数生成值的字符串文字版本,则更容易发现这些差异:
>>> line = b'STAGE\r\n'
>>> Ardinput = line.decode('utf8')[:-1]
>>> print(Ardinput)
STAGE
>>> print(repr(Ardinput))
'STAGE\r'
注意后者如何显示值中仍有\r
回车字符。
\r
和\n
被视为空格,空格和制表符以及non-break space:
>>> '\t\t Hello world! \xa0\r\n'.strip()
'Hello world!'
请注意,中间的空间没有被移除; str.strip()
仅适用于字符串的引导和尾端。
答案 1 :(得分:0)
\r\n
表示带有换行符的回车符(因此:
STAGE
Befor CR
而不是STAGE Befor CR
)。您必须使用Ardinput.decode('utf-8').strip()
将其删除以删除换行符,或使用Ardinput.decode('utf-8')[:-2]
删除最后2个字符。