2016-08-31 2 views
0

실제로 스크립트를 실행하지 않고 스크립트 작성자가 정의한 전역 변수를 검색하는 방법이 있습니까? 예 : 코드 만 컴파일IronPython 스크립트를 실행하지 않고 변수 가져 오기

+1

아니요, 뭔가 스크립트를 해석해야하기 때문에 없습니다. 전역 변수의 값은 스크립트 옆에 저장되지 않습니다. 또는 스크립트를 실행하지 않고 스크립트를 작성하는 스크립트를 작성하십시오. –

+0

@MatthiasBurger 스크립트를 실제로 실행하기 전에 사용자로부터 입력을 읽어야합니다. 즉, 단일 정의에 대해서만 추가 스크립트를 작성하도록 사용자에게 요청해야합니다. 작업. IronPython 소스 코드에 연결하는 것을 피하고 싶었지만 이것이 지금 어디로 가야하는지 생각합니다. 어쨌든 내 계획은 읽기 전용 모드 인 경우 실행을 제한하는 런타임에 변수를 추가하는 것입니다. 내 사용자가 const 문자열을 정의한 다음 검색 할 수 없도록하려는 경우 (내 고통을 이해하기를 바랍니다) – Hristo

+0

다른 사용자에게 쓰기 전역 변수가 설정 파일 (config.py eg)에 설정되어있는 곳에서 실행하고'from config import *'를 사용하여 실제 스크립트에서 임포트하는 스크립트는 문제가되지 않아야합니다. 'myglobal = 'test'와 같이 저장된 config.py 변수에만 있습니다. –

답변

1

정확하게 이해한다면 본질적으로 스크립트의 초기 부분을 실행하기 전에 실행해야합니다. 내가하는 일은 "global"변수 대신에 scope 변수를 사용한다는 점에서 다음과 같습니다.

[Test] 
    public void TestPythonDymanicCall() 
    { 
     string customScript = @" 
      scriptScopeVar1 = 3 
      def executeSomething(): 
       global scriptScopeVar1 
       scriptScopeVar1 = scriptScopeVar1 + 1 
     ".unindent(); 
     var engine = Python.CreateEngine(); 
     var scope = engine.CreateScope(); 
     engine.Execute(customScript, scope); 
     Assert.AreEqual(3, engine.Execute("scriptScopeVar1", scope)); 
     engine.Execute("executeSomething()", scope); 
     Assert.AreEqual(4, engine.Execute("scriptScopeVar1", scope)); 
    } 
관련 문제