2011-05-16 70 views
10

我正在嘗試在python中編寫一個非常簡單的電子郵件腳本。它基本上是一個窮人的笨蛋。在工作中,我們從服務器周圍發送大量數據,並且從服務器直接發送它會容易得多。管道文本到Python腳本或提示

我卡在的部分是處理消息。我希望用戶能夠做到以下幾點:

$ cat message.txt | emailer.py [email protected] 
$ tail -n 2000 /var/log/messages | emailer.py [email protected] 

這兩個都很簡單。我只需sys.stdin.read()並獲取我的數據。

說我有問題是,我也想支持一個提示與以下用法鍵入消息:

emailer.py --attach-file /var/log/messages [email protected] 

Enter Your message. Use ^D when finished. 
>> Steve, 
>> See the attached system log. See all those NFS errors around 2300 UTC today. 
>> 
>> ^D 

說我有麻煩的是,如果我試圖sys.stdin.read() ,並且沒有數據,那麼我的程序將阻塞,直到stdin獲取數據,但我無法打印我的提示。 我可以採取安全的做法,並使用raw_input("Enter Your message. Use ^D when finished.")而不是stdin.read(),但我總是打印提示。

有沒有辦法查看用戶是否將文本導入python而不使用會阻塞的方法?

+2

你見過'mail'命令嗎? – csl 2011-05-16 22:28:22

+0

我們將主要使用它來附加文件。沒有uuencode的郵件是沒用的,我們沒有。 – fandingo 2011-05-16 22:31:19

回答

17

您可以使用sys.stdin.isatty來檢查腳本是否以交互方式運行。例如:

if sys.stdin.isatty(): 
    message = raw_input('Enter your message ') 
else: 
    message = sys.stdin.read() 
+0

謝謝zeekay。就像我認爲的那樣簡單。 – fandingo 2011-05-16 23:00:15