【问题标题】:How to launch own 2to3 fixer?如何启动自己的 2to3 修复程序?
【发布时间】:2014-07-01 10:46:28
【问题描述】:

我编写了自己的修复程序,我该如何运行它?我没有找到明显的方法来做到这一点。

只有这个:

> cd /usr/lib/python2.7/lib2to3/fixes/
> ln -s path/to/my_fixer.py

然后运行它:

> cd path/to/project
> 2to3 -f my_fixer .

【问题讨论】:

  • 如果您不确定如何运行它,您可能不应该创建它。
  • 但我需要它!我正在寻找用于全局修改源代码并保存 cmets 的工具,2to3 似乎具有适当的功能。如果你知道答案为什么不说? :(
  • grep + awk + ​​sed + xargs + 2to3?
  • awk/sed - 好工具,但我需要在 Python 中计算一些逻辑。
  • 好吧,如果你只是教你的自定义转换器对单个文件进行操作,从标准输入获取要操作的文件名,然后使用 grep/find/ln/whatever 获取文件列表一个目录,然后通过标准输入将其提供给您的转换器?

标签: python python-2to3


【解决方案1】:

我明白了! (文件:my2to3)

#!/usr/bin/env python2.7
import sys
from lib2to3.main import main

sys.path.append('path/to/my_own_package')
sys.exit(main('my_own_package.contained_fixers'))

然后运行它:

> ./my2to3 -f my_fixer -w project

【讨论】:

    【解决方案2】:
    • 创建目录/mypath/custom_fixers
    • 使用此内容生成文件/mypath/custom_fixers/fix_custom_fixers.py

      from lib2to3.fixer_base import BaseFix
      from lib2to3.pgen2 import token
      
      class FixCustomFixers(BaseFix):
      
          _accept_type = token.NAME
      
          def match(self, node):
              if node.value == 'oldname':
                  return True
              return False
      
          def transform(self, node, results):
              node.value = 'newname'
              node.changed()
      
    • 用这个内容创建一个文件/mypath/myfixer.py

      import sys
      from lib2to3.main import main
      sys.exit(main('custom_fixers'))
      
    • 运行PYTHONPATH=/mypath python3 /mypath/myfixer.py -f custom_fixers python_file_to_fix.py

    【讨论】:

      猜你喜欢
      • 2023-03-10
      • 1970-01-01
      • 2011-07-05
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-06-13
      相关资源
      最近更新 更多