没有名为fcntl的模块

时间:2011-04-04 19:19:37

标签: c# module compiler-errors ironpython fcntl

我正在尝试使用IronPython 2.7在.NET 4.0上使用IronPython执行此方法。我正在使用Windows 7

import os
import re
import nltk
import urllib
import xapian
import sys

def getData(url):
        try:
         html = urllib.urlopen(url)
         text = html.read()
         html.close()
        except:
            return "error"
        try:
            return nltk.clean_html(text) #takes the tokens
        except:
            return text

C#CODE:

public static object Execute()
        {
            string scriptPath = "Calculator.py";
            ScriptEngine engine = Python.CreateEngine();
            engine.SetSearchPaths(new string[] { "c:\\Python26\\lib","c:\\Python26\\lib\\site-packages",
                "C:\\IronPython-2.7\\Lib\\site-packages","C:\\IronPython-2.7\\Lib"});
            ScriptSource source = engine.CreateScriptSourceFromFile(scriptPath);
             ScriptScope scope = engine.CreateScope();
        ObjectOperations op = engine.Operations;
        source.Execute(scope);

        dynamic Calculator = scope.GetVariable("Calculator");
        dynamic calc = Calculator();

        return calc.getData("http://www.wowebook.com/dot-net/ironpython-in-action.html");



        }

有人能告诉我我做错了什么吗?我一直认为我没有fcntl模块

5 个答案:

答案 0 :(得分:3)

fcntl isn't really一个windows native(平台:Unix)所以你可能运气不好,the following StackOverflow thread可能(或可能没有)帮助......

答案 1 :(得分:1)

当我遇到这个问题时,结果问题是我在搜索路径中只有CPython库(我以前在CPython中安装了NLTK)而不是IronPython库。

在我的C#代码中,我现在有类似

的内容
 engine.SetSearchPaths(new string[] {"C:\\Program Files\\IronPython 2.7\\Lib"
                                    ,"C:\\Python27\\Lib"
                                    ,"C:\\Python27\\Lib\\site-packages"
                                    });

当我在这个问题上摸不着头脑时,我注意到我不小心输入了2.7.1作为我的IronPython路径,即。一个不存在的目录。哦,我只是注意到OP在它们的源代码中有一个类似的搜索路径条目,也许也可能是搜索路径的顺序?

对于处于类似职位的人有用的线索:我注意到我的NLTK使用代码在从ipy.exe加载时工作正常,所以不是可移植性问题......(并且NLTK源不包含任何地方的字符串fcntl)

答案 2 :(得分:0)

我认为到目前为止,最简单的解决方案是切换到CPython。我认为它不会比你现有的解决方案更集成,你可以避免所有令人头疼的问题。

答案 3 :(得分:0)

import sys
sys.path.append("X:\Python27x64")
sys.path.append("X:\Python27x64\DLLs")
sys.path.append("X:\Python27x64\Lib")
sys.path.append("X:\Python27x64\Lib\site-packages")
sys.platform = "win32"
import nltk

答案 4 :(得分:0)

遇到了完全相同的问题,直到我订购了导入并且sys.path.append完全像这样才起作用:

sys.path.append("C:\\Program Files\\IronPython 2.7\\Lib") sys.path.append("C:\\Program Files\\IronPython 2.7\\Lib\\site-packages") sys.path.append("C:\\Python27\\Lib") sys.path.append("C:\\Python27\\Lib\\site-packages")