如何将python2代码移植到python3?

时间:2017-07-22 14:08:17

标签: python python-2.7 python-3.x

我找到以下代码在输出中打印objdump的shellcode或机器代码但在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 '[[: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

3 个答案:

答案 0 :(得分:1)

使用python发行版附带的2to3工具。其用法的一个例子是:

foo.py

def foo:
    for i in xrange(5):
        print i,

foo()

在命令行中,您将输入:

$ 2to3 -w foo.py

foo.py(后命令):

def foo():
    for i in range(5):
        print(i, end=' ')

foo()

在代码上运行2to3,只显示打印需求发生变化:print(sc_part)

答案 1 :(得分:0)

print(sc_part)可能是您唯一需要改变的地方。

答案 2 :(得分:0)

如果您粘贴了堆栈跟踪,那将会很有帮助。

无论如何,请尝试将print sc_part替换为print(sc_part)

此外,您可以阅读Python3 here中的所有更改。