[英]“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.