Python re.findall需要字符串



我想用re.findall在字符串中搜索一个单词。代码如下:

def check_status():
p1 = subprocess.run(["screen", "-ls"], shell=False)
p2 = re.findall("myscreen", p1)
print(p2)

来自p1的返回如下:

There are screens on:
2420454.myscreen        (12/25/2021 01:15:17 PM)        (Detached)
6066.bot                (12/14/2021 07:11:52 PM)        (Detached)

如果我执行这个功能,我会得到以下错误消息:

File "/usr/lib/python3.10/re.py", line 240, in findall
return _compile(pattern, flags).findall(string)
TypeError: expected string or bytes-like object

我已经搜索了这个问题,但一无所获。

我使用的是Python 3.10

subprocess.run返回一个CompletedProcess对象。您希望将capture_output=Truetext=True添加到关键字参数中,并将正则表达式应用于其stdout成员:

p2 = re.findall('myprocess', p1.stdout)

当然,您不需要正则表达式来查找静态字符串:

p2 = 'myprocess' in p1.stdout

如果您想提取屏幕ID,可以在stdout.splitlines()上循环,并从匹配行中提取第一个令牌。

p2 = []
for line in p1.stdout.splitlines():
if 'myprocess' in line:
p2.append(line.split('.')[0]

相关内容

  • 没有找到相关文章

最新更新