我正在调用一个使用 imaplib.py 的 python 脚本,并收到“没有名为 fcntl 的模块”错误。通过搜索,我发现这个模块仅在unix中可用,所以我想知道py脚本是否对它运行的操作系统感到困惑。同样,脚本在 Windows 下工作正常,直接从 python 目录运行。
var engine = Python.CreateEngine();
ScriptScope scope = engine.CreateScope();
var ops = engine.Operations;
var script = engine.CreateScriptSourceFromFile("PyTest.py");
CompiledCode code = script.Compile();
//string scode = script.GetCode();
code.Execute(scope);
以及触发它的最小 py 脚本。请注意,注释掉 import imaplib.py 行将停止错误。
import sys
sys.path = ["Python\Lib"]
sys.platform = ["win32"]
import os
import os
import getopt
import getpass
import time
import imaplib
我追踪了一下imaplib.py使用的subprocess.py,在那里我注意到了sys.platform变量并尝试将其设置为win32,如上所述,但没有什么区别。 IronPython 调用环境和 cpython 文件夹中的 Windows 命令提示符之间有些不同。
最佳答案
首先,您将 sys.platform
设置为一个列表,它应该是一个字符串。不过,.NET/CLI 是与 Win32 不同的平台,因此仅设置 sys.platform
没有帮助。
一些谷歌搜索表明 IronPython 不支持 subprocess
模块(或者该模块不支持 IronPython)。这里有部分替换:http://www.ironpython.info/index.php?title=The_subprocess_module
这里还有一个包含一些讨论的错误报告:http://bugs.python.org/issue8110
关于c# - "No module named fcntl"当 py 脚本从 c# 运行但从 Windows 命令行运行时,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4027157/