2012-02-19 7 views
0

파이썬에서 작동하지만 불행히도 매우 느린 코드가 있습니다. #python의 누군가는 프로파일 러를 통해 코드를 실행하여 코드가 가장 많은 시간을 소비하는 선과 함수를 볼 수 있다고 제안했습니다.ipython 프로파일 러

프로파일 링하려는 python 소스 코드는 STDIN에서 읽습니다. 그러나 입력이 커지므로 입력을 파일로 컴파일하여 쉘에서 파이썬 코드로 간단히 리디렉션 할 수 있습니다. 그래서 쉘에서, 나는 명령을 실행 .. 내가 ipython에서 프로파일 러를 실행하려고 내가 파이썬 코드 입력을 리디렉션 할 수있는 방법을 찾을 수 없습니다 때

cat input | python pythonsource.py 

문제가있다. ipython 쉘에서, 나는

run -p -l 1.0 pythonsource.py input (didn't work. simply waits at STDIN for input) 
run -p -l 1.0 pythonsource.py << input (didn't work) 
run -p -l 1.0 cat input | python pythonsource.py (didn't work.) 

나는 내가 ipython 프로파일 명령에서 읽을 수있는 pythonsource에 대한 STDIN의 입력을 리디렉션 할 수 있습니다 수행하는 방법을 잘 모르겠어요, 노력했다. 누군가이 문제를 해결할 수있는 방법을 알려주시겠습니까? 아니면 내가 완전히 잘못 됐어? 어쩌면 파이썬 코드를 프로파일 링하는 다른 더 깨끗하고, 더 똑똑한 방법이 있을까요?

그리고 다음 질문은 다른 질문의 일부가되어야합니다.하지만 ipython이 ipython 프로파일 러의 출력에서 ​​"원시 호출"을 참조 할 때 ipython이 의미하는 것은 무엇입니까?

감사합니다. 다음

+0

는 지금까지 내가 아는 한, 표준 입력에서 배관이 IPython의 '%의 run'와 호환되지 않습니다. 수동으로 프로파일 링을 실행해야합니다. http://docs.python.org/library/profile.html#instant-user-s-manual –

답변

0

에 쉘 커맨드를 입력 리디렉션 올바른 방법은 :

cat input | run -p -l 1.0 python pythonsource.py 

run -p -l 1.0 python pythonsource.py < input 

구문 << string는 "여기 문서"가 입력을 재 않는다 만든다.

파이썬 프롬프트에서

(희망 ipython에서),이 같은 표준 입력을 재 지정할 수 있습니다 :

import sys 
save_stdin = sys.stdin 
sys.stdin = open('input') 
run -p <etc.> 
sys.stdin = save_stdin # Restore the real stdin 

또는 (권장) 당신은 파일 이름으로 작업 소스를 다시 작성할 수 있습니다 : 당신이로 호출하는 경우 다음, "입력"sys.argv[1]에있을 것입니다 그리고 당신은 그것을 열고 그것에서 읽을 수 있습니다

python pythonsource.py input 
+0

ipython 셸에서이 두 명령을 모두 시도했지만 둘 중 어느 것도 작동하지 않았습니다. . 첫 번째 명령의 경우'sh : run : not found'를 얻습니다. 'cat : write error : Broken pipe' 그리고 두 번째 명령은 ipython 프롬프트에서 STDIN의 입력을 기다립니다. 세 번째 옵션을 시도해 볼 수는 있지만 코드를 수정하지 않고 파이썬 코드와 입력 파일에서 프로파일 러를 실행할 수 있는지 알고 싶었습니다. – Jay

+0

죄송합니다, 부주의했습니다. 당신의 시도는 쉘 명령 행에서 작동하지 않았을 것이므로 올바른 사용법을 알려주었습니다. – alexis

+0

고마워,하지만 토마스 케이가 제안한 링크에서 언급 한 -cProfile 메서드를 사용했다. 소스 코드를 수정하지 않고도 명령 줄에서 더 쉽게 작업 할 수있다. – Jay