在Popen stdout中查找子字符串引发“TypeError:从Python 2更新到3后,需要一个类似字节的对象,而不是str”[重复]

gzjq41n4  于 2023-03-28  发布在  Python
关注(0)|答案(1)|浏览(124)

此问题在此处已有答案

subprocess "TypeError: a bytes-like object is required, not 'str'"(2个答案)
12小时前关门了。
我正在将一个程序从Python 2更新到Python 3。
如果在命令的stdout中找到字符串,程序会检查很多,但是在Python 3中,我遇到了很多问题。

cmd = 'ps aux | grep iproxy'
p = subprocess.Popen(cmd, shell=True, stdout=subprocess.PIPE, stderr=subprocess.PIPE)
stdout, stderr = p.communicate()
        
if 'iproxy 2222 22' in stdout:
File "/Users/ben/Documents/ios/iosation/iosation3.py", line 469, in startConf
if 'iproxy 2222 22' in stdout:
TypeError: a bytes-like object is required, not 'str

将其更改为适当的字符串find方法基本上会产生相同的错误。
一个二个一个一个
在Python 2下工作了很多年,但Python 3不喜欢它,为什么呢?

jogvjijk

jogvjijk1#

你所面临的问题是由于Python 2和Python 3中字符串处理方式的不同。在Python 2中,默认字符串类型是ASCII,它与bytes类型兼容。然而,在Python 3中,默认字符串类型是Unicode,它与bytes类型不兼容。
我觉得这能行。

cmd = 'ps aux | grep iproxy'
p = subprocess.Popen(cmd, shell=True, stdout=subprocess.PIPE, stderr=subprocess.PIPE)
stdout, stderr = p.communicate()
        
if b'iproxy 2222 22' in stdout.decode('utf-8'):
    # Do something

相关问题