作者:_快樂Smile_903 | 来源:互联网 | 2023-07-06 12:25
我正在寻找一种使用runpy或其他工具传递杂项选项的方法。
特别是,我想在另一个未优化的 python 脚本中获取优化的 python 脚本的输出。
python -O tobeoptimized.py
我曾尝试使用子进程,但我无法像在 runpy 中那样提取我需要的对象。
from subprocess import PIPE, run
command = ['python','-O','tobeoptimized.py']
result = run(command, stdout=PIPE, stderr=PIPE, universal_newlines=True)
回答
不是,runpy
因为它没有产生一个新进程,(exec())。如果可以这样做,这个问题就会有答案。因此,我们几乎陷入了 C 代码库或扩展世界,其中CPython的核心被修改为至少可以从 C API 访问,如果不能从 Python API 访问。
而是尝试使用子进程来传递标志。可以调整输出。
如果问题是您想从进程中提取一个对象(因此子进程“失败”),您需要查看pickle
模块或简单地将其放入文件/缓冲区/套接字并以自定义方式检索数据+重新组装.
Subprocess 并不是真正强制性的,但是如果有任何其他实现,它不会“破解它”,因为阻碍的是编译的核心,而不是可以被猴子修补的东西。
我想我们需要核心开发人员的新功能?:)
关于子流程输出,这对我来说很好用。
# hello.py
print("Hello")
# main.py
from subprocess import Popen, PIPE
process = Popen(
["python", "-O", "hello.py"],
stdout=PIPE, stderr=PIPE, universal_newlines=True
)
print(process.stdout.read())