的-c
和-m
开关,最终(*)运行与所提供的代码exec
语句或compile()
功能,这两者取Latin-1的源代码:
第一个表达式的计算结果应为Unicode字符串, Latin-1 编码的字符串,打开的文件对象,代码对象或元组。
这没有记录,它是一个实现细节,可能会或可能不会将其视为错误。
我认为这不值得解决,而Latin-1是ASCII的超集,因此损失很少。Python 3中已经清理了如何处理代码-c
以及如何-m
处理代码,并且在此更加一致。随同传递的代码将-c
使用当前语言环境进行解码,并且-m
像往常一样,使用该开关加载的模块默认为UTF-8。
(*)如果您想知道使用的确切实现,请从中的Py_Main()
函数Modules/main.c
开始,该函数同时处理-c
和-m
:
if (command) {
sts = PyRun_SimpleStringFlags(command, &cf) != 0;
free(command);
} else if (module) {
sts = RunModule(module, 1);
free(module);
}