java - 如何使用 Jython 从 InputStream 或字节中编译带有编码声明的 Python 文件?
问题描述
在 Java 中,我想检查一些 Python 2 文件中的语法错误,因此使用 Jython 似乎是一个不错的选择。从理论上讲,这应该很容易,如另一个答案所示。当我从文件中读取时,我使用Reader
. 我真的更喜欢使用InputStream
.
Reader reader = openReaderToPythonFile();
new org.python.util.PythonInterpreter().compile(reader)
采用或作为参数的唯一compile()
选项。这意味着我提供给它的内容已经是 Unicode 字符串形式,而不是字节。PythonInterpreter
String
Reader
问题是我想检查一个现有的 Python 文件,该文件在PEP 263之后的顶部有指示 UTF-8 编码的行。(这是因为默认情况下 Python 2 源文件被视为 ASCII。)它看起来像这样:
#!/usr/bin/python
# -*- coding: utf-8 -*-
…
即使我手动将文件(正确)读取为 UTF-8,当我将字符串(或Reader
实例)传递PythonInterpreter
给编译时,我也会收到此错误:
encoding declaration in Unicode string
换句话说PythonInterpreter
,“这个文件有一个编码声明,但我不能尊重编码声明,因为在我有机会分析它之前你已经将字节转换为字符串”。但PythonInterpreter
似乎没有提供一种方法来传递原始字节或(最好)一个InputStream
.
如果文件包含编码声明,如何使用 Jython 编译 Python 文件?如果这不可能,作为一种解决方法,Jython 是否可以忽略编码声明并相信我已将字节正确转换为 aString
或Reader
?
解决方案
推荐阅读
- optimization - 我们如何在放大器中制作数千组?
- linux - 如何修复 Cshell 脚本中的“无法打开共享对象文件”?
- json - 将此 JSON 转换为树并找到父级的路径
- excel - 收到“应用程序定义或对象定义”错误
- python-3.x - 列表中的重复条目
- c++ - 使用 if/else if 的函数输出问题
- compilation - ARM 裸机程序编译 - 控制闪存写入
- java - 使用 AWS Toolkit 更新 Elastic Beanstalk 环境的 Eclipse Java 出错 - javax/xml/bind/JAXBException
- javascript - Typescript 是否在类构造函数中设置接口属性?
- jquery - 我需要帮助在单击按钮时将输入字段从 div 添加到另一个 div