#! /usr/bin/env python3 import serial import codecs import argparse serialdevice='/dev/ttyUSB0' chars=" qwertzuiopü+asdfghjklöä#yxcvbnm,.-QWERTZUIOPÜ*ASDFGHJKLÖÄ'YXCVBNM;:_1234567890ß!\"§$%&/()=?°²³" ''' Teilung 10: 65 Teilung 12: 78 Teilung 15: 97 ''' def main(): parser = argparse.ArgumentParser(description='Send Textfile over serial') parser.add_argument('filename', help="file to print") parser.add_argument('-d', '--device', nargs='?', help="serial device name") parser.add_argument('-l', '--length', nargs='?', type=int, help="maximum line length") parser.add_argument('-x','--dryrun', action="store_true", help="do not send anything to printer") args = parser.parse_args() charsperline=65 if args.length is not None: charsperline=int(args.length) print("args.length: "+str(args.length)) print("Checking for maximum line length: "+str(charsperline)) filename=args.filename if args.device is not None: serialdevice=args.device lines=[] with codecs.open(filename, encoding='utf-8') as file: lines=file.readlines() lines=[x.rstrip() for x in lines] # remove whitespaces and linebreaks for iline,line in enumerate(lines): if not set(line).issubset(chars): print(str(iline)+":"+str(line)) print("Contains non printable characters") exit() if len(line)>charsperline: print(str(iline)+":"+str(line)) print("Line is too long." +str(len(line))+">"+str(charsperline)) exit() if (args.dryrun): print("Dry Run enabled. Exiting") exit() with serial.Serial(serialdevice, 9600, timeout=1) as ser: for line in lines: print(line) ser.write(line.encode()) ser.write(b'\n') if __name__ == "__main__": main()