当py脚本从c#运行但是从Windows命令行运行时,“没有名为fcntl的模块”

时间:2010-10-26 19:15:18

标签: c# .net python ironpython

我正在调用一个使用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命令提示符之间有所不同。

2 个答案:

答案 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