mirror of
https://github.com/Schrolli91/BOSWatch.git
synced 2026-03-11 23:44:34 +01:00
fix bug in handling when arg -h/--help is used
Problem: Some unexpected exception are thrown, when arg war -h Reason: ArgParser throws SystemExit exception when -h is used Solution: 1.) Move ArgParser to the first position, to prevent create the objects 2.) make sure, the finally block of the main program will not be called 3.) catch SystemExit exception
This commit is contained in:
parent
fedf879a06
commit
50ce6b2671
280
boswatch.py
280
boswatch.py
|
|
@ -22,6 +22,8 @@ import os #for log mkdir
|
|||
import time #timestamp
|
||||
import subprocess
|
||||
|
||||
import sys
|
||||
|
||||
from includes import globals # Global variables
|
||||
|
||||
##
|
||||
|
|
@ -58,12 +60,37 @@ def freqToHz(freq):
|
|||
except:
|
||||
logging.exception("Error in freqToHz()")
|
||||
|
||||
|
||||
|
||||
#
|
||||
# Manage args parsing
|
||||
#
|
||||
try:
|
||||
# With -h or --help you get the Args help
|
||||
# ArgsParser
|
||||
parser = argparse.ArgumentParser(prog="boswatch.py",
|
||||
description="BOSWatch is a Python Script to recive and decode german BOS information with rtl_fm and multimon-NG",
|
||||
epilog="More options you can find in the extern config.ini file in the folder /config")
|
||||
# parser.add_argument("-c", "--channel", help="BOS Channel you want to listen")
|
||||
parser.add_argument("-f", "--freq", help="Frequency you want to listen", required=True)
|
||||
parser.add_argument("-d", "--device", help="Device you want to use (Check with rtl_test)", type=int, default=0)
|
||||
parser.add_argument("-e", "--error", help="Frequency-Error of your device in PPM", type=int, default=0)
|
||||
parser.add_argument("-a", "--demod", help="Demodulation functions", choices=['FMS', 'ZVEI', 'POC512', 'POC1200', 'POC2400'], required=True, nargs="+")
|
||||
parser.add_argument("-s", "--squelch", help="Level of squelch", type=int, default=0)
|
||||
parser.add_argument("-v", "--verbose", help="Shows more information", action="store_true")
|
||||
parser.add_argument("-q", "--quiet", help="Shows no information. Only logfiles", action="store_true")
|
||||
args = parser.parse_args()
|
||||
except SystemExit:
|
||||
# -h or --help called, exit now
|
||||
exit(0)
|
||||
except:
|
||||
print "Unexpected error parsing the arguments"
|
||||
|
||||
|
||||
#
|
||||
# Programm
|
||||
#
|
||||
try:
|
||||
try:
|
||||
try:
|
||||
#
|
||||
# Script-pathes
|
||||
#
|
||||
|
|
@ -74,7 +101,7 @@ try:
|
|||
#
|
||||
if not os.path.exists(globals.script_path+"/log/"):
|
||||
os.mkdir(globals.script_path+"/log/")
|
||||
|
||||
|
||||
#
|
||||
# Create new myLogger...
|
||||
#
|
||||
|
|
@ -116,157 +143,136 @@ try:
|
|||
except:
|
||||
logging.exception("cannot clear Logfiles")
|
||||
|
||||
try:
|
||||
#
|
||||
# For debug display/log args
|
||||
#
|
||||
logging.debug(" - Frequency: %s", freqToHz(args.freq))
|
||||
logging.debug(" - Device: %s", args.device)
|
||||
logging.debug(" - PPM Error: %s", args.error)
|
||||
logging.debug(" - Squelch: %s", args.squelch)
|
||||
|
||||
demodulation = ""
|
||||
if "FMS" in args.demod:
|
||||
demodulation += "-a FMSFSK "
|
||||
logging.debug(" - Demod: FMS")
|
||||
if "ZVEI" in args.demod:
|
||||
demodulation += "-a ZVEI2 "
|
||||
logging.debug(" - Demod: ZVEI")
|
||||
if "POC512" in args.demod:
|
||||
demodulation += "-a POCSAG512 "
|
||||
logging.debug(" - Demod: POC512")
|
||||
if "POC1200" in args.demod:
|
||||
demodulation += "-a POCSAG1200 "
|
||||
logging.debug(" - Demod: POC1200")
|
||||
if "POC2400" in args.demod:
|
||||
demodulation += "-a POCSAG2400 "
|
||||
logging.debug(" - Demod: POC2400")
|
||||
|
||||
logging.debug(" - Verbose Mode: %s", args.verbose)
|
||||
logging.debug(" - Quiet Mode: %s", args.quiet)
|
||||
|
||||
if args.verbose:
|
||||
ch.setLevel(logging.DEBUG)
|
||||
if args.quiet:
|
||||
ch.setLevel(logging.CRITICAL)
|
||||
|
||||
if not args.quiet: #only if not quiet mode
|
||||
from includes import shellHeader
|
||||
shellHeader.printHeader(args)
|
||||
except:
|
||||
logging.exception("cannot display/log args")
|
||||
|
||||
try:
|
||||
#
|
||||
# Parse args
|
||||
# Read config.ini
|
||||
#
|
||||
logging.debug("parse args")
|
||||
#With -h or --help you get the Args help
|
||||
#ArgsParser
|
||||
parser = argparse.ArgumentParser(prog="boswatch.py", description="BOSWatch is a Python Script to Recive and Decode German BOS Information with rtl_fm and multimon-NG", epilog="More Options you can find in the extern config.ini File in this Folder")
|
||||
#parser.add_argument("-c", "--channel", help="BOS Channel you want to listen")
|
||||
parser.add_argument("-f", "--freq", help="Frequency you want to listen", required=True)
|
||||
parser.add_argument("-d", "--device", help="Device you want to use (Check with rtl_test)", type=int, default=0)
|
||||
parser.add_argument("-e", "--error", help="Frequency-Error of your Device in PPM", type=int, default=0)
|
||||
parser.add_argument("-a", "--demod", help="Demodulation Functions", choices=['FMS', 'ZVEI', 'POC512', 'POC1200', 'POC2400'], required=True, nargs="+")
|
||||
parser.add_argument("-s", "--squelch", help="Level of Squelch", type=int, default=0)
|
||||
parser.add_argument("-v", "--verbose", help="Shows more Information", action="store_true")
|
||||
parser.add_argument("-q", "--quiet", help="Shows no Information. Only Logfiles", action="store_true")
|
||||
args = parser.parse_args()
|
||||
logging.debug("reading config file")
|
||||
globals.config = ConfigParser.ConfigParser()
|
||||
globals.config.read(globals.script_path+"/config/config.ini")
|
||||
for key,val in globals.config.items("BOSWatch"):
|
||||
logging.debug(" - %s = %s", key, val)
|
||||
except:
|
||||
logging.error("cannot parse args")
|
||||
else:
|
||||
logging.exception("cannot read config file")
|
||||
else:
|
||||
|
||||
try:
|
||||
#
|
||||
# For debug display/log args
|
||||
#
|
||||
logging.debug(" - Frequency: %s", freqToHz(args.freq))
|
||||
logging.debug(" - Device: %s", args.device)
|
||||
logging.debug(" - PPM Error: %s", args.error)
|
||||
logging.debug(" - Squelch: %s", args.squelch)
|
||||
|
||||
demodulation = ""
|
||||
if "FMS" in args.demod:
|
||||
demodulation += "-a FMSFSK "
|
||||
logging.debug(" - Demod: FMS")
|
||||
if "ZVEI" in args.demod:
|
||||
demodulation += "-a ZVEI2 "
|
||||
logging.debug(" - Demod: ZVEI")
|
||||
if "POC512" in args.demod:
|
||||
demodulation += "-a POCSAG512 "
|
||||
logging.debug(" - Demod: POC512")
|
||||
if "POC1200" in args.demod:
|
||||
demodulation += "-a POCSAG1200 "
|
||||
logging.debug(" - Demod: POC1200")
|
||||
if "POC2400" in args.demod:
|
||||
demodulation += "-a POCSAG2400 "
|
||||
logging.debug(" - Demod: POC2400")
|
||||
|
||||
logging.debug(" - Verbose Mode: %s", args.verbose)
|
||||
logging.debug(" - Quiet Mode: %s", args.quiet)
|
||||
|
||||
if args.verbose:
|
||||
ch.setLevel(logging.DEBUG)
|
||||
if args.quiet:
|
||||
ch.setLevel(logging.CRITICAL)
|
||||
|
||||
if not args.quiet: #only if not quiet mode
|
||||
from includes import shellHeader
|
||||
shellHeader.printHeader(args)
|
||||
except:
|
||||
logging.exception("cannot display/log args")
|
||||
|
||||
try:
|
||||
#
|
||||
# Set the loglevel and backupCount of the file handler
|
||||
#
|
||||
# Read config.ini
|
||||
#
|
||||
logging.debug("reading config file")
|
||||
globals.config = ConfigParser.ConfigParser()
|
||||
globals.config.read(globals.script_path+"/config/config.ini")
|
||||
for key,val in globals.config.items("BOSWatch"):
|
||||
logging.debug(" - %s = %s", key, val)
|
||||
logging.debug("set loglevel of fileHandler to: %s",globals.config.getint("BOSWatch","loglevel") )
|
||||
fh.setLevel(globals.config.getint("BOSWatch","loglevel"))
|
||||
logging.debug("set backupCount of fileHandler to: %s", globals.config.getint("BOSWatch","backupCount"))
|
||||
fh.setBackupCount(globals.config.getint("BOSWatch","backupCount"))
|
||||
except:
|
||||
logging.exception("cannot read config file")
|
||||
else:
|
||||
logging.exception("cannot set loglevel of fileHandler")
|
||||
|
||||
#
|
||||
# Load plugins
|
||||
#
|
||||
from includes import pluginLoader
|
||||
pluginLoader.loadPlugins()
|
||||
|
||||
#
|
||||
# Load filters
|
||||
#
|
||||
if globals.config.getint("BOSWatch","useRegExFilter"):
|
||||
from includes import filter
|
||||
filter.loadFilters()
|
||||
|
||||
try:
|
||||
#
|
||||
# Start rtl_fm
|
||||
#
|
||||
logging.debug("starting rtl_fm")
|
||||
rtl_fm = subprocess.Popen("rtl_fm -d "+str(args.device)+" -f "+str(freqToHz(args.freq))+" -M fm -s 22050 -p "+str(args.error)+" -E DC -F 0 -l "+str(args.squelch)+" -g 100",
|
||||
#stdin=rtl_fm.stdout,
|
||||
stdout=subprocess.PIPE,
|
||||
stderr=open(globals.script_path+"/log/rtl_fm.log","a"),
|
||||
shell=True)
|
||||
except:
|
||||
logging.exception("cannot start rtl_fm")
|
||||
else:
|
||||
|
||||
try:
|
||||
#
|
||||
# Set the loglevel and backupCount of the file handler
|
||||
#
|
||||
logging.debug("set loglevel of fileHandler to: %s",globals.config.getint("BOSWatch","loglevel") )
|
||||
fh.setLevel(globals.config.getint("BOSWatch","loglevel"))
|
||||
logging.debug("set backupCount of fileHandler to: %s", globals.config.getint("BOSWatch","backupCount"))
|
||||
fh.setBackupCount(globals.config.getint("BOSWatch","backupCount"))
|
||||
# Start multimon
|
||||
#
|
||||
logging.debug("starting multimon-ng")
|
||||
multimon_ng = subprocess.Popen("multimon-ng "+str(demodulation)+" -f alpha -t raw /dev/stdin - ",
|
||||
stdin=rtl_fm.stdout,
|
||||
stdout=subprocess.PIPE,
|
||||
stderr=open(globals.script_path+"/log/multimon.log","a"),
|
||||
shell=True)
|
||||
except:
|
||||
logging.exception("cannot set loglevel of fileHandler")
|
||||
|
||||
#
|
||||
# Load plugins
|
||||
#
|
||||
from includes import pluginLoader
|
||||
pluginLoader.loadPlugins()
|
||||
|
||||
#
|
||||
# Load filters
|
||||
#
|
||||
if globals.config.getint("BOSWatch","useRegExFilter"):
|
||||
from includes import filter
|
||||
filter.loadFilters()
|
||||
|
||||
try:
|
||||
#
|
||||
# Start rtl_fm
|
||||
#
|
||||
logging.debug("starting rtl_fm")
|
||||
rtl_fm = subprocess.Popen("rtl_fm -d "+str(args.device)+" -f "+str(freqToHz(args.freq))+" -M fm -s 22050 -p "+str(args.error)+" -E DC -F 0 -l "+str(args.squelch)+" -g 100",
|
||||
#stdin=rtl_fm.stdout,
|
||||
stdout=subprocess.PIPE,
|
||||
stderr=open(globals.script_path+"/log/rtl_fm.log","a"),
|
||||
shell=True)
|
||||
except:
|
||||
logging.exception("cannot start rtl_fm")
|
||||
else:
|
||||
logging.exception("cannot start multimon-ng")
|
||||
else:
|
||||
|
||||
try:
|
||||
logging.debug("start decoding")
|
||||
|
||||
while True:
|
||||
#
|
||||
# Start multimon
|
||||
# Get decoded data from multimon-ng and call BOSWatch-decoder
|
||||
#
|
||||
logging.debug("starting multimon-ng")
|
||||
multimon_ng = subprocess.Popen("multimon-ng "+str(demodulation)+" -f alpha -t raw /dev/stdin - ",
|
||||
stdin=rtl_fm.stdout,
|
||||
stdout=subprocess.PIPE,
|
||||
stderr=open(globals.script_path+"/log/multimon.log","a"),
|
||||
shell=True)
|
||||
except:
|
||||
logging.exception("cannot start multimon-ng")
|
||||
else:
|
||||
|
||||
# RAW Data from Multimon-NG
|
||||
# ZVEI2: 25832
|
||||
# FMS: 43f314170000 (9=Rotkreuz 3=Bayern 1 Ort 0x25=037FZG 7141Status 3=Einsatz Ab 0=FZG->LST2=III(mit NA,ohneSIGNAL)) CRC correct\n'
|
||||
# POCSAG1200: Address: 1234567 Function: 1 Alpha: Hello World
|
||||
#decoded = str(multimon_ng.stdout.readline()) #Get line data from multimon stdout
|
||||
|
||||
logging.debug("start decoding")
|
||||
# Test-strings only for develop
|
||||
#decoded = "ZVEI2: 25832"
|
||||
#decoded = "FMS: 43f314170000 (9=Rotkreuz 3=Bayern 1 Ort 0x25=037FZG 7141Status 3=Einsatz Ab 0=FZG->LST 2=I (ohneNA,ohneSIGNAL)) CRC correct\n'"
|
||||
#decoded = "FMS: 43f314170000 (9=Rotkreuz 3=Bayern 1 Ort 0x25=037FZG 7141Status 3=Einsatz Ab 1=LST->FZG 2=I (ohneNA,ohneSIGNAL)) CRC correct\n'"
|
||||
#decoded = "FMS: 43f314170000 (9=Rotkreuz 3=Bayern 1 Ort 0x25=037FZG 7141Status 3=Einsatz Ab 0=FZG->LST 2=II (ohneNA,mit SIGNAL)) CRC correct\n'"
|
||||
#decoded = "FMS: 43f314170000 (9=Rotkreuz 3=Bayern 1 Ort 0x25=037FZG 7141Status 3=Einsatz Ab 1=LST->FZG 2=III(mit NA,ohneSIGNAL)) CRC correct\n'"
|
||||
#decoded = "FMS: 43f314170000 (9=Rotkreuz 3=Bayern 1 Ort 0x25=037FZG 7141Status 3=Einsatz Ab 0=FZG->LST 2=IV (mit NA,mit SIGNAL)) CRC correct\n'"
|
||||
#decoded = "POCSAG1200: Address: 1234567 Function: 1 Alpha: Hello World"
|
||||
#time.sleep(1)
|
||||
|
||||
while True:
|
||||
#
|
||||
# Get decoded data from multimon-ng and call BOSWatch-decoder
|
||||
#
|
||||
|
||||
# RAW Data from Multimon-NG
|
||||
# ZVEI2: 25832
|
||||
# FMS: 43f314170000 (9=Rotkreuz 3=Bayern 1 Ort 0x25=037FZG 7141Status 3=Einsatz Ab 0=FZG->LST2=III(mit NA,ohneSIGNAL)) CRC correct\n'
|
||||
# POCSAG1200: Address: 1234567 Function: 1 Alpha: Hello World
|
||||
decoded = str(multimon_ng.stdout.readline()) #Get line data from multimon stdout
|
||||
|
||||
# Test-strings only for develop
|
||||
#decoded = "ZVEI2: 25832"
|
||||
#decoded = "FMS: 43f314170000 (9=Rotkreuz 3=Bayern 1 Ort 0x25=037FZG 7141Status 3=Einsatz Ab 0=FZG->LST 2=I (ohneNA,ohneSIGNAL)) CRC correct\n'"
|
||||
#decoded = "FMS: 43f314170000 (9=Rotkreuz 3=Bayern 1 Ort 0x25=037FZG 7141Status 3=Einsatz Ab 1=LST->FZG 2=I (ohneNA,ohneSIGNAL)) CRC correct\n'"
|
||||
#decoded = "FMS: 43f314170000 (9=Rotkreuz 3=Bayern 1 Ort 0x25=037FZG 7141Status 3=Einsatz Ab 0=FZG->LST 2=II (ohneNA,mit SIGNAL)) CRC correct\n'"
|
||||
#decoded = "FMS: 43f314170000 (9=Rotkreuz 3=Bayern 1 Ort 0x25=037FZG 7141Status 3=Einsatz Ab 1=LST->FZG 2=III(mit NA,ohneSIGNAL)) CRC correct\n'"
|
||||
#decoded = "FMS: 43f314170000 (9=Rotkreuz 3=Bayern 1 Ort 0x25=037FZG 7141Status 3=Einsatz Ab 0=FZG->LST 2=IV (mit NA,mit SIGNAL)) CRC correct\n'"
|
||||
#decoded = "POCSAG1200: Address: 1234567 Function: 1 Alpha: Hello World"
|
||||
#time.sleep(1)
|
||||
|
||||
from includes import decoder
|
||||
decoder.decode(freqToHz(args.freq), decoded)
|
||||
from includes import decoder
|
||||
decoder.decode(freqToHz(args.freq), decoded)
|
||||
|
||||
except KeyboardInterrupt:
|
||||
logging.warning("Keyboard Interrupt")
|
||||
|
|
|
|||
Loading…
Reference in a new issue