唯物是真 @Scaled_Wurm

プログラミング(主にPython2.7)とか機械学習とか

Pythonでsubprocessを使って複数のコマンドをパイプでつなぐ


おそらく以下の記事の方法のほうが簡単です(追記、2013年11月9日)


knpを使ってみようと思ったのですが,呼び出すときにknpとjumanをパイプでつながないといけません.
subprocess の勉強も兼ねてやってみました.close しないと次のコマンドが始まらないのがわかるまで時間がかかりました.
もっとよい書き方がありそうですね.
環境によって動かないみたいなので,どこかが間違ってるみたい.パイプでつなぐとうまくいかない……
一応単純に subprocess.call('echo 解析する文字列 | nkf -e | juman | knp -tab > 出力先のファイル名', shell = True) みたいにやれば動きます。

import subprocess
def knp(str):
	juman = subprocess.Popen(["juman"], stdin=subprocess.PIPE, stdout=subprocess.PIPE, shell=True)
	knp = subprocess.Popen(["knp", "-tab"], stdin=juman.stdout, stdout=subprocess.PIPE, shell=True)
	juman.stdin.write(str.encode("cp932"))
	juman.stdin.close()
	juman.stdout.close()
	return knp.communicate()[0]
def main():
	print knp(u"貴社の記者が汽車で帰社した")
if __name__ == '__main__':
	main()
	raw_input()