2014年7月31日木曜日

開発環境

Head First C ―頭とからだで覚えるCの基本(David Griffiths (著)、Dawn Griffiths (著) 中田 秀基(監訳)(翻訳)、木下 哲也 (翻訳)、オライリージャパン)の10章(プロセス間通信: お話は楽しい)、エクササイズ(p.447)をpythonで考えてみる。

エクササイズ(p.447)

コード(BBEdit, Emacs)

news_opener.py

#!/usr/bin/env python3
#-*- coding: utf-8 -*-

import os
import sys

def error(msg):
    print('{0}: {1}'.format(msg, err))
    sys.exit(1)

def open_url(url):
    cmd = {'linux':'x-www-browser', 'win32':'cmd /c start', 'darwin':'open'}
    launch = '{0} {1}'.format(cmd[sys.platform], url)
    print(launch)
    os.system(launch)

phrase = sys.argv[1]
env = {'RSS_FEED':"http://rss.cnn.com/rss/edition.rss"}

try:
    read_end, write_end = os.pipe()
except Exception as err:
    error("パイプを作成できません。")

try:
    pid = os.fork()
except Exception as err:
    error("プロセスをフォークできません。")

if pid == 0:
    os.close(read_end)
    os.dup2(write_end, sys.stdout.fileno())
    try:
        os.execle('/usr/bin/python', '/usr/bin/python', 'rssgossip.py', '-u',
                  phrase, env)
    except Exception as err:
        error('スクリプトを実行できません。')

os.dup2(read_end, sys.stdin.fileno())
os.close(write_end)

for line in sys.stdin:
    if line[0] == '\t':
        line = line.rstrip()
        open_url(line[1:])

入出力結果(Terminal, IPython)

$ ./news_opener.py Japan
open http://edition.cnn.com/video/data/2.0/video/world/2014/07/17/pkg-ripley-japan-inspirational-cross-dresser.cnn.html?eref=edition
open http://edition.cnn.com/2014/07/16/world/asia/china-japan-war-of-words/index.html?eref=edition
$

0 コメント:

コメントを投稿