簡體   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