"Kein Modul namens fcntl" wenn py Skript aus c # laufen, sondern funktioniert aus Windows-Befehlszeile

Ich rufe ein Python-Skript an, das imaplib.py verwendet und das "no module named fcntl" Fehler bekommt. Von der Suche fand ich, dass dieses Modul nur in Unix verfügbar ist und so frage ich mich, ob das py-Skript verwirrt ist, was os es läuft unter. Wieder funktioniert das Skript unter Windows direkt aus dem python-Verzeichnis.

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); 

Und das minimale py-Skript, um es auszulösen. Beachten Sie, dass das Kommentieren der Import-Imaplib.py-Zeile den Fehler beendet.

 import sys sys.path = ["Python\Lib"] sys.platform = ["win32"] import os import os import getopt import getpass import time import imaplib 

Ich habe es ein bisschen auf den Unterprozeß verfolgt.py, dass imaplib.py verwendet, da bemerkte ich die sys.platform Variable und versuchte, es zu win32 wie oben, aber machte keinen Unterschied. Etwas unterscheidet sich zwischen der Ironpython Calling Environment und der Windows-Eingabeaufforderung aus dem Cpython-Ordner.

2 Solutions collect form web for “"Kein Modul namens fcntl" wenn py Skript aus c # laufen, sondern funktioniert aus Windows-Befehlszeile”

Zuerst setzen Sie sys.platform auf eine Liste, es sollte ein String sein. .NET / CLI ist eine andere Plattform als Win32 aber so einfach Einstellung sys.platform wird nicht helfen.

Einige Googeln schlägt vor, dass IronPython das Unterprozeßmodul nicht unterstützt (oder das Modul unterstützt nicht IronPython). Es gibt einen teilweisen Ersatz hier: http://www.ironpython.info/index.php?title=The_subprocess_module

Es gibt auch einen Bugreport mit einer Diskussion hier: http://bugs.python.org/issue8110

Die Microsoft-Distribution lädt die Standardbibliothek standardmäßig nicht.

Sie müssen den Pfad in Ihren Code setzen, um darauf zuzugreifen.

Der einfachste Weg, es zu tun ist, um eine Umgebungsvariable namens "IRONPYTHONPATH" zu erstellen, die den Pfad zum Lib-Ordner der IronPython-Installation enthält.

Sobald Sie es erstellt haben, können Sie den Standort wie folgt lesen:

 from System import Environment pythonPath = Environment.GetEnvironmentVariable("IRONPYTHONPATH") import sys sys.path.append(pythonPath) 

Weitere Details hier. http://www.ironpython.info/index.php/Using_the_Python_Standard_Library

  • Ironpython nennt numpy Problem
  • Übergeben von DataTable an IronPython
  • Warum kann ich keine Variablen aus zwischengespeicherten Modulen in IronPython ändern?
  • Zuweisen einer Iron Python-Liste zu .NET-Array
  • IronPython / C # Ich kann einen seriellen Port nicht wieder öffnen, nachdem Script ausgeführt wurde
  • IronPython: Doppelwort nicht erkannt?
  • Was sind einige Strategien zu schreiben Python-Code, der in CPython, Jython und IronPython funktioniert
  • IronPython auf ASP.NET MVC
  • Lesen von UTF-8-Datei mit Codecs in IronPython
  • Fehlende lxml-Modul in Python?
  • Python-Pakete installieren - IronPython
  • Python ist die beste Programmiersprache der Welt.