我在windows中使用以下代码:
hostname = Popen(['hostname'], stdout=PIPE, stderr=PIPE)
stdout, stderr = process.communicate()
print(stdout)
regex = compile(b'('CO.*)')
m = regex.match(stdout)
if m != None:
print(m)
else:
print("Doesn't match")
我得到输出:
b'COMPUTER\r\n'
<_sre.SRE_Match object; span=(0, 15), match=b'COMPUTER\r'>
我知道,在这种情况下,我可以使用更简单的方法(但由于某些原因,我不想使用它):
socket.gethostname()
问题是,我不喜欢正则表达式匹配的整个输出:
<_sre.SRE_Match object; span=(0, 15), match=b'COMPUTER\r'>
我不只是COMPUTER
。你知道吗
有没有可能不用另一个正则表达式?你知道吗
这将得到字节字符串:
m.group(1)
。但是对于这个问题,不要使用regex,这是一种过度杀伤力。相反,使用if stdout.startswith(b'CO'):
您的regex包含Python语法错误,您不需要编译regex(
re.match(b'(CO.*)', stdout)
就可以了)。为什么不使用socket.gethostbyname()
?您是否在实际代码中执行hostname
以外的操作?你知道吗打印
m
时,您将获得sre
对象的表示形式(用于调试目的)为了克服小的打嗝,你可以做:
str
(去掉b
前缀)subprocess
输出中去掉CR+LF尾随字符相关问题 更多 >
编程相关推荐