繁体   English   中英

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

[英]“No module named fcntl” when py script run from c# but works from windows command line

我正在调用使用imaplib.py的python脚本,并收到“没有名为fcntl的模块”错误。 通过搜索,我发现该模块仅在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脚本。 请注意,注释掉import 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命令提示符之间有些不同。

首先,您将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

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM