文字列の中の複数の空白文字(スペース)を、正規表現を使ってコンマ(,)に変換する
ユースケース
- コマンド結果を文字列として取り込み、それを加工して使用する
- 例:ネットワークコマンドの実行結果など
~$ ss -tu
Netid State Recv-Q Send-Q Local Address:Port Peer Address:Port Process
tcp ESTAB 0 0 127.0.0.1:59976 127.0.0.1:39839
tcp ESTAB 0 0 127.0.0.1:59978 127.0.0.1:39839
tcp ESTAB 0 0 127.0.0.1:39839 127.0.0.1:59978
tcp ESTAB 0 0 127.0.0.1:39839 127.0.0.1:59976
- Linuxのコマンドは上記のような表示結果が多いので、この空白をセパレータに変更しリスト化するとデータの再利用がしやすい
コード
get_socket.py
import re
import subprocess
def get_socket():
get_socket = subprocess.run(['ss', '-tu'],
stdout=subprocess.PIPE,
stderr=subprocess.PIPE)
cmd_result = get_socket.stdout.decode('utf-8')
with open('/WorkSpace/Python/get_socket.txt', 'w') as f:
f.write(cmd_result)
socket_list = []
with open('/WorkSpace/Python/get_socket.txt', 'r') as f:
for read_line in f:
txt_value0 = re.sub(r'\s+', ',', read_line)
txt_value1 = txt_value0.split(',')
socket_list.append(txt_value1)
return socket_list
for list in get_socket():
print(list)
if __name__ == ('__main__'):
get_socket()
- subprocess.runでssコマンドを実行する
- コマンド結果をファイルに保存する(with open(file, 'w') as f: )
- ファイルから文字列を読み込む(with open(file, 'r') as f: )
- re.sub関数で複数空白文字 ( '\s+' ) を ( ',' ) コンマに変換する
- 文字列をsplit関数でセパレートに ( ',' ) を指定しリストに変換する
実行結果
python get_socket.py
['Netid', 'State', 'Recv-Q', 'Send-Q', 'Local', 'Address:Port', 'Peer', 'Address:Port', 'Process', '']
['tcp', 'ESTAB', '0', '0', '127.0.0.1:59976', '127.0.0.1:39839', '']
['tcp', 'ESTAB', '0', '0', '127.0.0.1:59978', '127.0.0.1:39839', '']
['tcp', 'ESTAB', '0', '0', '127.0.0.1:39839', '127.0.0.1:59978', '']
['tcp', 'ESTAB', '0', '150', '127.0.0.1:39839', '127.0.0.1:59976', '']