2009-09-24 9 views
7

sto ospitando il mio IronPython in C# webapp in questo modo:Impossibile utilizzare DateTime in IronPython

var engine = Python.CreateEngine(); 
var scope = engine.CreateScope(); 
var script = Engine.CreateScriptSourceFromString(pythonCode, SourceCodeKind.Statements); 
script.Execute(scope); 

E il mio codice Python è simile al seguente:

import clr 
clr.AddReference('System.Core') 

from System import DateTime 
theDate = DateTime.Today() 

che genera questo errore:

IronPython.Runtime.Exceptions.ImportException: Cannot import name DateTime 

Ho passato un po 'di tempo su Google e la maggior parte del codice che ho trovato non sembra funzionare più.

La mia versione di runtime IronPython è v2.0.50727 - dovrei eseguire l'aggiornamento? Avrei pensato che lo DateTime sarebbe stato in partenza presto?

+0

Qual è esattamente il messaggio di errore che ti dà? Python usa parentesi sulle proprietà? (In caso contrario, prova 'DateTime.Today'.) –

+0

2.0.50727 suona come un numero di versione CLR piuttosto che un numero di versione di IronPython, btw. Che versione mostra se hai appena eseguito ipy? –

risposta

11

provare ad aggiungere un riferimento a mscorlib invece di System.Core. Abbiamo modificato il comportamento di hosting predefinito ad un certo punto (2.0.1? 2.0.2?) In modo che questo venga eseguito di default durante l'hosting. Puoi farlo dal tuo codice di hosting con:

engine.Runtime.LoadAssembly(typeof(string).Assembly); 
+0

Grazie, è stato perfetto. – littlecharva

9

Appena controllato, il problema è che si sta tentando di chiamare Oggi come metodo anziché come proprietà. Prova a modificare (non c'è bisogno di aggiungere un riferimento a System.Core):

import clr 
from System import DateTime 
theDate = DateTime.Today 
print theDate 
+0

Osservando la domanda, l'errore sembra derivare da un errore di importazione, piuttosto che il fatto che "Oggi" viene chiamato come una funzione. – Rohit

+0

@Rohit: Non possiamo davvero dirlo, poiché non ci è stato detto quale sia il messaggio di errore. Con le parentesi su si fa * ottenere * un messaggio di errore ... –

+0

L'eccezione stava sparando sul comando di importazione, quindi non aveva nemmeno raggiunto la chiamata di oggi. Grazie comunque per il tuo aiuto. – littlecharva