在 linux 命令行上使用 python(不是 运行)编译字符串

Compiling a string using python(not running) on linux command line

我正在尝试为一个项目做一些事情,但在搜索和尝试一些不同的代码后找不到答案。

我想做的是从客户端接收一个字符串(通过 post 发送,我必须使用这种方法,老师的命令),然后使用 exec() 编译这个字符串在 php 文件中。基本上我是 "grading" 一个 python 代码片段作为字符串发送给我。我也在 Andrew 文件系统服务器 (afs) 上执行此操作。

我对 python 不是很有经验,主要使用其他语言,但我可以使用 php exec 制作 python 可执行文件,也可以使用cython(我们学校的linux机器都有,不知道该不该用这个)。我得到这个来处理文件。

我的问题是我不能简单地编译没有 运行 的字符串。我可以

python -c "print('Hello World')" 仅执行字符串,其中“print('Hello World')”将是一个 php 字符串变量

但我不确定如何简单地检查语法错误。

我试过 python -m py_compile -c "print('Hello World')" 但它不喜欢 py_compile 上的 -m 不喜欢字符串,只喜欢文件

所以除了基本上为客户端发送给我的每个字符串创建一个新的 .py 文件并进行处理之外,有没有更好的方法而不创建新文件或创建单独的 python 脚本来处理这个问题。我正在尝试在一个 php 文件中执行此操作。这可能是在字符串上执行 python 命令行脚本的一个大问题,所以我不妨问一下。

您可以使用解析器模块。编写这样的脚本:

import sys
import parser


data = sys.argv[1]

try:
    parser.suite(data)
except SyntaxError as e:
    print(e)

像这样调用

python3.6 /tmp/test.py "import math"