2009-10-21 7 views
4

IronPython 2를 사용하는 C# 응용 프로그램에 스크립팅 엔진이 내장되어 있습니다. Python 런타임을 만들고 전역 네임 스페이스에 몇 개의 클래스를 추가하여 스크립트가 모듈로 가져올 수 있도록합니다.스크립트 인수와 Embedded IronPython

그러나 내가 알 수없는 것 중 하나는 스크립트 인수를 보내는 방법입니다. 나는 인수의 목록을 가진 변수를 만들 수는 있지만 실현할 수있는 적절한 방법이 있어야한다는 것을 알고 있습니다. 또한 적절한 Python 방식으로 스크립트를 컴파일하고 Sphinx라는 자동화 된 문서 작성 도구를 사용할 수 있습니다. 따라서 궁극적 인 목표는 다음을 사용할 수있게하는 것입니다.

import sys 
sys.argv 

내 스크립트 중 하나에서 사용자가 (C# 응용 프로그램을 통해) 지정한 인수를 가져야합니다.

는 지금, 나는 사용하여 스크립트를 호출 :

// set up iron python runtime engine 
_engine = Python.CreateEngine(); 
_runtime = _engine.Runtime; 
_scope = _engine.CreateScope(); 

// run script 
_script = _engine.CreateScriptSourceFromFile(_path); 
_script.Execute(_scope); 

그리고 행운과 스크립트 인수를 추가하는 API 검색을 시도했습니다. 또한 스크립트 경로 (예 : _path)에 행운을 넣어 추가하려고했습니다. 나는 CreateScriptSourceFrom File과 CreateScriptSourceFromSting (어쨌든 긴 샷이었습니다 ...)을 시도했습니다.

내가 할 수있는 일이 가능한 것일까 요?

답변

6

, 당신은 "인수"를 추가 할 수 있습니다 (동적 키워드 4.0에서 더 쉽게)에 옵션에는 인수가 포함되어 있습니다.

IDictionary<string, object> options = new Dictionary<string, object>(); 
options["Arguments"] = new [] { "foo", "bar" }; 
_engine = Python.CreateEngine(options); 

이제 sys.argv에는 ["foo", "bar"]이 포함됩니다.

options["Arguments"]ICollection<string>을 구현하는 것으로 설정할 수 있습니다.

+0

버전을 지정하지 않았지만 2.6 버전이 필요할 수 있습니다. 2.0 버전을 확인할 필요가 없습니다. –

+0

2.0.1을 사용하고 있습니다. 감사! 나는이 사이트를 좋아한다. – cgyDeveloper

+0

아, 이것에 대해 몰랐어 - 좋은 찾을! –

1

sys.argv는 결국 호스팅 앱에 전달 된 실제 매개 변수를 반환합니다.

    다음 ScriptScope.SetVariable
  1. 실행 스크립트를 사용하여 전역 변수를 허용하도록 스크립트를 다시 작성, 실제로 당신이 메소드를 호출 할 수있는 클래스를 반환에 의존
  2. : 다음은이 문제를 해결하기위한 몇 가지 방법을의 자신의 구현
  3. 무시 sys.argv에 (모든 후에 동적 언어입니다!) 당신이 엔진을 만들 때
+0

흠 ... # 3은 갈 길이라고 생각합니다. 나는 'import sys'와 'sys.argv = args'를 ScriptScope에서 C#의 명령문으로 실행해야한다고 생각하니? 그렇다면 'import sys'와 'args = sys.argv'가 스크립트에서 작동합니다. 스크립트 (sys가 존재할 때 import sys)에서이 방법으로 Sphinx가 내 스크립트를 유효한 Python으로 인식하고 문서를 만들도록해야합니다. – cgyDeveloper