プロセスが残ってしまうのでkillするための関数を作った
圏9微博Webスクレイピング~微博フォロアー数を解析する python版に追加
1.残っているプロセス
Applications/Safari.app/Contents/MacOS/Safari --automation
2.kill する方法
subprocess.Popen でプロセスIDを抽出しkill する
3.コード
import os,signal import subprocess # Safari --automation プロセスをkill def kill_safari_auto(): ps = subprocess.Popen( 'ps aux | grep "Safari --automation"', stdin=subprocess.PIPE,stdout=subprocess.PIPE, close_fds=True, shell=True, text=True).stdout for line in ps.readlines(): if 'grep' in line: continue # grepが含まれていたら無視 pid = line.strip().split()[ 1 ] # pidを取り出す try: os.killpg( os.getpgid(int(pid)), signal.SIGKILL ) # プロセスツリーごと削除 except: pass # 例外処理
4.トラップメモ
1)subprocess.Popenの戻り値
① str に変換するとbytesだと言われ bytesに変換するとstrと言われエラーになって返り値を処理できない
② binary が戻ってくるみたい
③ text=True を指定しstrが戻るようにする
旧バージョンでは universal_newlines=True だったらしい
2)signal.SIGKILL
① os.killpg が動かずエラーメセージも出ない
② signal.SIGKILLが未定義
③ signal をimport する
エラーメッセージが出なかったので見つけるのに時間がかかった