2011-12-12 2 views
13

이것은 아마도 매우 기본적인 것이지만 좋은 해결책을 찾을 수 없습니다. 이 같은셸 명령 출력을 Python 스크립트 입력으로 리디렉션하는 방법은 무엇입니까?

$ some-linux-command | my_script.py 

뭔가 :

cat email.txt | script.py 

아니면 단지 센드 메일에서 직접 제의 .forward 파일에 파이프됩니다 는이 같은 파이프에서 입력을받을 수있는 파이썬 스크립트를 작성해야 . 즉, 첨부 파일이있는 경우 입력 파일의 크기가 비교적 클 수 있으며 나중에 전자 메일이됩니다. 나중에 보낸 사람, 제목 등을 데이터베이스에 저장해야하지만 데이터베이스 스크립트를 작성했습니다. 파이썬에서, 그 부분은 괜찮을 것입니다. 주요 문제는 파이프에서 유입되는 데이터를 캡처하는 방법입니다. 객체와 같은 파일 입력을 읽을 수

+0

왜 파이프에 고정 되었습니까? 그 결과를 파일에 쓰고 나중에 조작 할 수 없습니까? –

+5

@SrinivasReddyThatiparthy : 파이프가 유닉스의 본질입니다. 귀하의 의견은 유효하지 않습니다. – Stan

답변

3

읽기. 예 : s.py의

예 내용 :

import sys 
data = sys.stdin.readlines() 
print data 

- 실행 :

#!/usr/bin/env python 
:

[email protected]:~$ cat t.txt 
    alpha 
    beta 
    gamma 

    [email protected]:~$ cat t.txt | python ./s.py 
    ['alpha\n', 'beta\n', 'gamma\n'] 

당신은이 오두막을 사용하여 쉘 스크립트와 파이썬 스크립트를 만들 수 있습니다

및 'a + x'로 권한 변경

[email protected]:~$ cat t.txt | ./s.py 
['alpha\n', 'beta\n', 'gamma\n'] 
21

사용 sys.stdin입니다 sys.stdin에서

+0

고마워, 고맙게도 그 상자에서 sys를 가져올 수있다. (솔라리스 10, 다른 모듈을 가져 오는 데 문제가있다. 일부 모듈은 "ImportError : ld.so.1 :/usr/local/bin"을 던진다./python : 치명적인 : 재배치 오류 : 파일 /usr/local/lib/python2.6/lib-dynload/_socket.so : 심볼 inet_aton : 참조 된 심볼을 찾을 수 없습니다 "왜냐하면 솔라리스의 inet_pton이기 때문입니다.) – delta

+8

정답이면 작동합니다. – DhruvPathak

관련 문제