#1.はじめに
仕事をしていると、何度も同じ作業が発生したりすることがある。
あるフォルダにあるソースを毎日、いくつかの項目でgrepする。前日との差分比較をしたいため、テキストファイルに実施日付もファイル名に追加して保存。
大した時間ではないが、毎回だと鬱陶しい。
今回は(1),(2)を実行するスクリプトを作成することにした。
(1)sakuraエディタで指定フォルダをlotoでgrepをしたものをgrep_result_yyyymmdd.txtと名前を付けて保存
(2)sakuraエディタで指定フォルダをinsert into またはでgrepをしたものをinsert_result_yyyymmdd.txtと名前を付けて保存
#2.sakuraエディタ
下記場所からインストールできるフリーの高機能エディタ。
サクラエディタ
使用頻度の高いgrep機能と、豊富なコマンドラインオプションが魅力的なエディタだと個人的には思っている。
コマンドラインオプションを使用することで、やりたいことのほとんどが実行できる。
#3.実施手順
実装方法としては極めてシンプル。
(1)時刻の文字列を取得
(2)同じファイル名がある場合は削除
(3)サクラエディタのコマンドを実行
コマンドプロンプトにコマンドを打ち込むだけで、やりたい事はできるが
毎回コマンドを打ち込むのは面倒だ。
当初カッコよさを求めてpyautogui(マウス操作キーボード操作の自動実行モジュール)もトライしたけど上手くいかないことがわかって、上記方法に辿り着いた。
※pyautoguiでの自動実行を考えている場合は、本記事は役にたちません。
実行環境:OS:windows10,Python:3.8.10
#4.メモ(sakuraエディタのコマンドラインオプション)
(1)GFILE:検索対象のファイル
例)-GFILE="*.java|*.jsp"
(2)GFOLDER:検索対象のフォルダ
例)-GFOLDER="C:\data"
(3)GKEY:検索文字列
例)-GKEY="loto6"
(4)GOPT:オプション
S:サブフォルダも検索
R:正規表現を使える
U:結果出力先のファイルを指定できる(リダイレクトやパイプの後に出力ファイルを指定)
例)-GOPT="SRU"
#5.メモ(python)
(1)subprocess.run
指定したコマンドが終了してから、次のコマンドを実行する。
Popenは非同期で実行するところが違う。
例)subprocess.run(cmd0,shell=True)
#6.ソース
# -*- coding: utf-8 -*-
import subprocess
import time
import os
from datetime import datetime as dt
tdatetime=dt.now()
tstr=tdatetime.strftime('%Y%m%d')
def exec_grep(cmd0,fname0):
if os.path.isfile(fname0):
os.remove(fname0)
subprocess.run(cmd0,shell=True)
pgname="\"C:\Program Files (x86)\sakura\sakura.exe\""+" -GREPMODE"
dirname="-GFOLDER=\"C:\pleiades\workspace\""
gfile="-GFILE=\"*.java | *.jsp\""
gkey1="-GKEY=\"loto\""
gopt="-GOPT=SRPW1UH"
fname1="C:\grep_result\grep_result_"+tstr+".txt"
cmd1=pgname+" "+dirname+" "+gfile+" "+gkey1+" "+gopt+">"+"\""+fname1+"\""
exec_grep(cmd1,fname1)
fname2="C:\grep_result\sql_result_"+tstr+".txt"
gkey2="-GKEY=\"insert into |select \* from \""
cmd2=pgname+" "+dirname+" "+gfile+" "+gkey2+" "+gopt+">"+"\""+fname2+"\""
exec_grep(cmd2,fname2)
※>の前後にはスペースなどを入れるとエラーが出るので注意。