2013-07-01 1 views
3

웹 사이트에서 일기 예보를 검색하고 아침에 내 girfriend에게 보내는 스크립트를 작성했습니다.하위 프로세스 모듈을 사용하여 Python으로 이메일 보내기

Gmail 사용 물론 Postfix 서버를 사용하여 보낼 수 있습니다. 다음은 스크립트입니다.

무엇 많은 인자가있는 상황에서 Popen() 함수를 사용하는 방법이 확실하지 않습니다.

나는 명령을 사용하여 메일을 보낼 수 있습니다.

$ mail -s "おお様からの天気予報" [email protected] < foo

#!/usr/bin/env python 
# -*- coding: utf-8 -*- 
from bs4 import BeautifulSoup 
import urllib2 
import subprocess 

weather_url = "http://www.weather.com.cn/weather/101020100.shtml" 
f=urllib2.urlopen(weather_url) 
html = f.read() 
soup = BeautifulSoup(html) 

content = soup.title.string 

with open("foo","w") as mail: 
    mail.write(content.encode('utf-8')) 

command_line = 'mail -s "おお様からの天気予報" [email protected] < foo' 

li = command_line.split() 

process = subprocess.Popen(li, shell=True) 

returncode = process.wait() 

날씨 보고서의 내용은 foo 파일에 있습니다. 누군가 많은 도구로 Popen()을 사용하는 방법을 말해 줄 수 있습니까?

많은 시도를했습니다.

이 스크립트는 효과가없는 것 같습니다.

답변

2
방금 ​​인수 문자열을 전달할 수 있습니다 shell=True 사용하는 경우는 인수 목록을 통과 할 필요가 없습니다

...

command_line = 'mail -s "おお様からの天気予報" [email protected] < foo' 
process = subprocess.Popen(command_line, shell=True) 

또는 .. 당신은 당신의 인수를 해석하고 전달하는 쉘을 사용할 수 없습니다 당신이 인수 목록 를 통과하지 수 그것을 해석 셸을 사용하여

command_line = 'mail -s "おお様からの天気予報" [email protected] < foo' 
li = command_line.split() 
process = subprocess.Popen(li) 

그러나 목록 ....

명령의 특성에 따라 해석 할 문자열을 셸에 전달하는 것이 좋습니다. (첫 번째 옵션)

+0

고맙습니다, 빠른 답장, 시도해 보겠습니다. –

+0

당신은 천재입니다. 그것은 매력처럼 작동했습니다. 대답은 짧지 만, 고맙습니다. 감사합니다. 이제는 cron을 사용하여 일상적인 일기 예보를 내 여자 친구에게 보냅니다. –

+0

이것이 도움이된다면, [내 대답 수락] (http : // meta. stackexchange.com/a/5235/192545) –