Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/python-2.7/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何将python2代码移植到python3?_Python_Python 2.7_Python 3.x - Fatal编程技术网

如何将python2代码移植到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

我发现下面的代码在输出中打印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 '[[: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()