如何将python2代码移植到python3?
我发现下面的代码在输出中打印objdump的外壳代码或机器代码,但在python3中我无法运行它。如何将其移植到python3:如何将python2代码移植到python3?,python,python-2.7,python-3.x,Python,Python 2.7,Python 3.x,我发现下面的代码在输出中打印objdump的外壳代码或机器代码,但在python3中我无法运行它。如何将其移植到python3: import subprocess import sys from subprocess import Popen num_of_args = len(sys.argv) binary_file = sys.argv[1] #| awk -F'[:]' '{print $2}' | awk -F'[ ]' '{print $1}' | tr -d '[[:spa
import subprocess
import sys
from subprocess import Popen
num_of_args = len(sys.argv)
binary_file = sys.argv[1]
#| awk -F'[:]' '{print $2}' | awk -F'[ ]' '{print $1}' | tr -d '[[:space:]]'
proc = subprocess.Popen(['arm-linux-gnueabi-objdump','-d',binary_file], stdin=subprocess.PIPE, stdout=subprocess.PIPE, stderr=subprocess.PIPE)
while True:
line = proc.stdout.readline()
if line != '':
array = line.rstrip().split(':')
if len(array) > 1:
if array[1]:
array2 = array[1].split(' ')
array2 = array2[0].lstrip().rstrip()
if array2:
sc_part = '"'
sc_part += '\\x'
sc_part += '\\x'.join(a+b for a,b in zip(array2[::2], array2[1::2]))
sc_part += '"'
print sc_part
else:
break
打印(sc_部分)
可能是您唯一需要更改的内容。如果您粘贴stacktrace,这将非常有用
无论如何,试着用print(sc\U部件)
替换print(sc\U部件)
此外,您可以阅读python 3中的所有更改。使用python发行版附带的工具。其用法示例如下:
foo.py
def foo:
for i in xrange(5):
print i,
foo()
在命令行中,您将键入:
$ 2to3 -w foo.py
foo.py
(post命令):
在您的代码上运行
2to3
,似乎只有打印需要更改:print(sc\u部分)
请提供有关您尝试移植到Python 3的代码中失败的具体信息。也许有人会过来帮你移植这些代码,然后你继续前进。但总的来说,抛弃代码并要求社区“解决问题”是一种糟糕的形式。关于Python2和Python3之间的差异,有大量的信息。当您运行代码并出现语法错误时,请尝试隔离该区域,然后查找发生这种情况的原因。通过这种方式,您将了解更多信息。当我使用python3运行代码时,它会显示错误:array=line.rstrip().split(“:”)TypeError:Type str不支持缓冲区APII更改它,但当我使用py3运行代码时,它会显示错误:array=line.rstrip().split(“:”)TypeError:Type str不支持缓冲区API@YuriProshkin是 啊它被读取为字节。您需要将其转换为:line.decode().rstrip().split(“:”)
python2上也会出现同样的错误。谢谢。现在可以了。但代码的循环永远不会退出。循环控制的问题在哪里?@YuriProshkin数据以字节形式读取。您正在将普通字符串'
与不再有输出时返回的字节字符串b'
进行比较。更改为if行!=b'':
def foo():
for i in range(5):
print(i, end=' ')
foo()