Saya memiliki beberapa skrip Python yang bertebaran, dan saya sedang mengerjakan penulisan ulang. Saya memiliki masalah yang sama dengan mereka semua.
Tidak jelas bagi saya bagaimana menulis program sehingga mereka berperilaku seperti alat unix yang tepat.
Karena ini
$ cat characters | progname
dan ini
$ progname characters
harus menghasilkan output yang sama.
Hal terdekat yang dapat saya temukan dengan Python adalah perpustakaan fileinput. Sayangnya, saya tidak benar-benar melihat cara menulis ulang skrip Python saya, yang semuanya terlihat seperti ini:
#!/usr/bin/env python
# coding=UTF-8
import sys, re
for file in sys.argv[1:]:
f = open(file)
fs = f.read()
regexnl = re.compile('[^\s\w.,?!:;-]')
rstuff = regexnl.sub('', fs)
f.close()
print rstuff
Perpustakaan fileinput memproses stdin jika ada stdin, dan memproses file jika ada file. Tapi iterates lebih dari satu baris.
import fileinput
for line in fileinput.input():
process(line)
Saya benar-benar tidak mengerti. Saya kira jika Anda berurusan dengan file kecil, atau jika Anda tidak berbuat banyak untuk file, ini mungkin tampak jelas. Tapi, untuk tujuan saya, ini membuatnya jauh lebih lambat daripada hanya membuka seluruh file dan membacanya menjadi string, seperti di atas.
Saat ini saya menjalankan script seperti di atas
$ pythonscript textfilename1 > textfilename2
Tapi saya ingin bisa menjalankannya (dan saudara-saudaranya) di pipa, seperti
$ grep pattern textfile1 | pythonscript | pythonscript | pythonscript > textfile2