类型错误:尝试遍历正在运行的进程列表时,需要类似字节的对象,而不是"str"



我在Windows中使用Python。我试图杀死一个正在运行的windows进程,如果它已经在运行,但我得到下面的错误:

TypeError:需要一个bytes-like object,而不是'str'

我导入以下模块:

import os
import subprocess
from time import sleep

然后在我的代码下面:

s = subprocess.check_output('tasklist', shell=True)
if "myProcess.exe" in s:
print('myProcess.exe is currently running. Killing...')
os.system("taskkill /f /im myProcess.exe")
sleep(0.5)

当尝试比较进程myProcess.exe是否在列表s中时,错误仅在条件中发生。

默认情况下,subprocess.check_output返回bytes对象。当您检查bytes中字符串的成员时,您看到的错误发生。

例如:

'foo' in b'bar'

结果:

TypeError: a bytes-like object is required, not 'str'

你可以用两种不同的方式来解决这个问题,通过将text=True传递给subprocess.check_output或简单地使用bytes对象来检查成员资格。

s = subprocess.check_output('tasklist', shell=True, text=True)

或:

if b"myProcess.exe" in s:
# do something

最新更新