#! /usr/bin/env python3 import serial import codecs import argparse serialdevice='/dev/ttyUSB0' chars=" qwertzuiopü+asdfghjklöä#yxcvbnm,.-QWERTZUIOPÜ*ASDFGHJKLÖÄ'´`YXCVBNM;:_1234567890ß!\"§$%&/()=?°²³|" 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('-w', '--wait', nargs='?', type=int, help="wait after x characters") 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)) waitafter=0 if args.wait is not None: waitafter=int(args.wait) print("Waiting after every "+str(charsperline)+" characters sent") 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 lines=[x.replace("´", "´ ") for x in lines] # add space to chars where printer is not advancing lines=[x.replace("`", "` ") for x in lines] # add space to chars where printer is not advancing 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") with serial.Serial(serialdevice, 9600, timeout=1) as ser: charssent=0 for iline,line in enumerate(lines): if waitafter>0 and charssent>waitafter: input("Press Enter to continue...") charssent=0 print(str(iline)+"/"+str(len(lines))+" ("+str(charssent)+")"+":"+str(line)) charssent+=len(line) if (not args.dryrun): ser.write(line.encode()) ser.write(b'\n') if __name__ == "__main__": main()