2009-08-26 4 views
1

프로그래밍이 새로 생겼고 인터넷에서 파이썬 스크립트에 bash 출력을 전달하는 방법을 검색했습니다.bash 출력을 파이썬 스크립트로 전달하는 문제

나는 이것을 bash에서 생각해 냈습니다.

XAS_SVN=`svn info` 
ssh [email protected] "python/runtests.py $XAS_SVN" 

그리고 이것은 파이썬으로 작성되었습니다.

import sys 
print sys.argv[1] 

내가 echo $SVN_INFO 인 경우 결과가 나타납니다.

경로 :. URL : // SVN/RND-프로젝트/테스트/파이썬 저장소 루트 : // SVN/RND-프로젝트 저장소 UUID : d07d5450-0a36-4e07-90d2-9411ff75afe9 수정 : 140 노드 종류 : 디렉토리 일정 : 정상 마지막으로 변경된 저자 : (140) 마지막으로 변경된 날짜 : 2009-06-09 14시 13분 29초 0200 (2009년 (화) 6월 9일)

그러나 파이썬 로이 반 데르 발크 마지막 레브 변경 스크립트는 다음을 인쇄합니다.

경로 :

왜이 내가이 어떻게 해결할 수 있습니까? SVN_INFO 변수가 문자열 유형이 아닌가?

나는 하위 프로세스 모듈과 Popen 함수에 대해 알고 있지만 파이썬 스크립트가 다른 서버에서 실행되기 때문에 이것이 해결책이라고 생각하지 않습니다.

+0

왜 af의 응답이 유효한지, 실제로 작동하지 않는지, 작은 따옴표 안에 변수를 확장 할 수 없습니다 ('echo '$ PATH'). – tonfa

답변

0

예, 파이썬/runtest.py에 입력을 인용해야합니다. 그렇지 않으면 argv [1]이 첫 번째 공백까지만 가져 오기 때문입니다. 이처럼 : 당신이 변수에 공백이 있기 때문에

ssh [email protected] "python/runtest.py \"$XAS_SVN\"" 
+0

테스트 해 보셨습니까? 작은 따옴표를 사용하면 변수 XAS_SVN이 확장되지 않습니다. – tonfa

+0

네, 맞습니다. 수정되지 않은 답변을 테스트 할 때 약간의 혼란이있었습니다. 나는 다른 껍질로 그것을 시험했고 따옴표를 다르게 다루었 다. 내 잘못이야. –

+0

처음에는 작동하지 않았지만 편집 한 후 완벽하게 작동합니다. 감사합니다! –

1

, 당신이 그들을 탈출하거나 스크립트의 모든 인수 읽을 필요가 :

print ' '.join(sys.argv[1:]) 

를하지만 표준 입력/표준 출력에 사용하는 것이 더 좋을 수도 . 민감한 일부 문자가 출력에 쉘 (같은 "`$ ')에 의해 해석이있을 수있다, 특히, 통신 를 파이썬 스크립트에서 수행

for l in sys.stdin: 
    sys.stdout.write(l) 

와 쉘 :

svn info | ssh [email protected] python/runtests.py 
+0

예! 다른 대답보다 훨씬 낫다. –

관련 문제