我正在调用一个使用imaplib.py并获取“no module named fcntl”错误的python脚本。从搜索中我发现这个模块只能在unix中使用,所以我想知道py脚本是否与它运行的操作系统相混淆。同样,脚本在直接从python目录运行的Windows下运行正常。
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脚本。请注意,注释掉导入的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命令提示符之间有所不同。
答案 0 :(得分:3)
首先,您要将sys.platform
设置为列表,它应该是一个字符串。 .NET / CLI是一个与Win32不同的平台,因此设置sys.platform
无济于事。
一些谷歌搜索表明IronPython不支持subprocess
模块(或模块不支持IronPython)。这里有部分替换:http://www.ironpython.info/index.php?title=The_subprocess_module
还有一个bug报告,其中有一些讨论:http://bugs.python.org/issue8110
答案 1 :(得分:0)
默认情况下,Microsoft发行版不会加载标准库。
您必须在代码中设置路径才能访问它。
最简单的方法是创建一个名为“IRONPYTHONPATH”的环境变量,其中包含IronPython安装的Lib文件夹的路径。
创建后,您可以按如下方式阅读该位置:
from System import Environment
pythonPath = Environment.GetEnvironmentVariable("IRONPYTHONPATH")
import sys
sys.path.append(pythonPath)
这里有更多细节。 http://www.ironpython.info/index.php/Using_the_Python_Standard_Library