«Нет модуля с именем fcntl», когда скрипт Py запускается из C #, но работает из командной строки Windows - PullRequest
1 голос
/ 26 октября 2010

Я вызываю скрипт на python, использующий imaplib.py, и получаю ошибку «no module named fcntl».В результате поиска я обнаружил, что этот модуль доступен только в Unix, и поэтому мне интересно, если скрипт py не понимает, под каким он работает.Опять же, скрипт прекрасно работает под окнами, запускаемыми непосредственно из каталога 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 для его запуска.Обратите внимание, что комментирование строки импорта imaplib.py остановит ошибку.

import sys
sys.path = ["Python\Lib"]
sys.platform = ["win32"]

import os
import os
import getopt
import getpass
import time
import imaplib

Я немного отследил ее до subprocess.py, который использует imaplib.py, там я заметил переменную sys.platform и попыталсяустановив его на win32, как указано выше, но без разницы.Что-то отличается между средой вызова ironpython и командной строкой Windows из папки cpython.

Ответы [ 2 ]

3 голосов
/ 26 октября 2010

Прежде всего вы устанавливаете sys.platform в список, это должна быть строка. Платформа .NET / CLI отличается от платформы Win32, поэтому установка sys.platform не поможет.

Некоторые Googling предполагают, что IronPython не поддерживает модуль subprocess (или модуль не поддерживает IronPython). Здесь возможна частичная замена: http://www.ironpython.info/index.php?title=The_subprocess_module

Здесь также есть сообщение об ошибке с обсуждением: http://bugs.python.org/issue8110

0 голосов
/ 17 августа 2011

Дистрибутив Microsoft не загружает стандартную библиотеку по умолчанию.

Вы должны установить путь в своем коде, чтобы получить к нему доступ.

Самый простой способ сделать это - создать переменную среды IRONPYTHONPATH, которая будет содержать путь к папке Lib установки IronPython.

Как только вы его создали, вы можете прочитать местоположение следующим образом:

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

...