2009-05-01 2 views
4

IronPython과 Mono를 시험해보고 싶습니다. 특히 sysadmin 작업을 수행합니다. 종종 OS 명령을 실행하는 것을 의미합니다. CPython에서는 이러한 작업에 서브 프로세스 모듈을 사용합니다. 그러나 IronPython (v2.0.1, Mono 2.4, Linux)에는 하위 프로세스 모듈이 없습니다. 'os'모듈조차없는 것 같습니다. 그래서 os.system()을 사용할 수 없습니다. IronPython에서 CPython에서 일반적으로 'subprocess'또는 'os.system()'을 사용하는 작업은 무엇입니까?IronPython/Mono에서 OS 쉘 명령을 실행하는 방법은 무엇입니까?

답변

10

답변을 찾았습니다. "IronPython Cookbook"덕택입니다. 하나가이 주제에 대한 자세한 정보를 찾을 수 있습니다 : 그것은 쉘에 IronPhython을 지원하지만 모노 아시다시피 않는 경우 http://www.ironpython.info/index.php/Launching_Sub-Processes

>>> from System.Diagnostics import Process 
>>> p = Process() 
>>> p.StartInfo.UseShellExecute = False 
>>> p.StartInfo.RedirectStandardOutput = True 
>>> p.StartInfo.FileName = 'uname' 
>>> p.StartInfo.Arguments = '-m -r' 
>>> p.Start() 
True 
>>> p.WaitForExit() 
>>> p.StandardOutput.ReadToEnd() 
'9.6.0 i386\n' 
>>> p.ExitCode 
0 
>>> 
+1

주의 : "RedirectStandardOutput = True"및 "WaitForExit()"_can_을 설정하면 교착 상태가 발생할 수 있습니다. stdoutput 버퍼가 채워지면 프로세스는 "누군가"가 버퍼를 비울 때까지 기다리고, 버퍼를 비울 수있는 사람은 프로세스가 완료 될 때까지 대기합니다. – Nils

1

대부분의 표준 OS 모듈은 ironpython에서 사용할 수 있습니다.

import sys 
sys.path.append path('...pathtocpythonlib......') 
import os 
+0

팁 주셔서 감사합니다. 하지만 IronyPython을 작동시키기 위해 CPython 배포를 번들하는 것을 피하고 싶습니다. 게다가 : sys.path를 CPython intallation에 필요한 디렉토리로 확장해도 '하위 프로세스'가 작동하지 않는 것 같습니다. 'fcntl'에 따라 다릅니다. 어떤 공유 라이브러리 (fcntl.so)입니다. – Cyberdrow

+0

이 경우에는 .net System.Diagnostics.Process 클래스를 사용하는 것이 좋습니다. 아래 Cyberdrow의 답변을 참조하십시오. –

+0

죄송 합니다만 당신이 해결했습니다. –

0

확실하지 .... 너무이 C# Interactive Shell을 고려하십시오.

+0

C# 셸은 쉘에서 C# 명령을 실행하는 것과 반대의 문제가 있습니다. 모노에서 셸 명령 실행 – mat

0

여기에 일부 서브 프로세스 모듈 구현이 :

http://www.bitbucket.org/jdhardy/code/src/tip/subprocess.py

(이 때, 2010 년 6 월) 모듈은 (에서와 같이, 당신은 같은 파일 자체를 제공 할 수 STDIO 파이프를 리디렉션 지원됩니다 출력으로 채우거나 입력을 스트리밍하는 객체), 기본 사항 만 있으면 충분합니다.

관련 문제