문제

C# 애플리케이션에 Ironpython 2를 사용하는 C# 응용 프로그램에 내장 된 스크립팅 엔진이 있습니다. 파이썬 런타임을 생성하고 스크립트가 모듈로 가져올 수 있도록 글로벌 네임 스페이스에 몇 가지 클래스를 추가합니다.

그러나 내가 알 수없는 한 가지는 스크립트 인수를 보내는 방법입니다. 인수 목록이있는 변수를 만들 수 있다는 것을 알고 있지만 적절한 방법이 있어야합니다. 또한 적절한 '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)에 추가하려고 시도했습니다. 파일에서 CreateScriptSource를 사용하여 만들어 내고 CreateScriptSourceFromSting (어쨌든 긴 샷이었습니다 ...).

내가하려는 일이 가능합니까?

도움이 되었습니까?

해결책

엔진을 만들 때 "인수"옵션을 추가 할 수 있습니다. 인수가 포함되어 있습니다.

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>.

다른 팁

SYS.ARGV는 결국 전달 된 실제 매개 변수를 호스팅 앱으로 반환 할 것입니다. 다음은 이것을 해결하는 몇 가지 방법이 있습니다.

  1. 스크립트를 다시 작성하여 전역 변수를 수락 한 다음 scriptscope.setvariable을 사용하십시오.
  2. 스크립트를 실행하지만 실제로 클래스를 반환하기 위해 의존하여 메소드를 호출 할 수 있습니다 (동적 키워드를 사용하면 4.0에서 훨씬 쉽습니다).
  3. 자신의 구현으로 sys.argv를 무시하십시오 (이것은 결국 역동적 인 언어입니다!)
라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top