make sure we define extruders before endstops for obscure reasons
[clinton/Smoothieware.git] / smoothie-stream.py
1 #!/usr/bin/env python
2 """\
3 Stream g-code to Smoothie telnet connection
4
5 Based on GRBL stream.py
6 """
7
8 from __future__ import print_function
9 import sys
10 import telnetlib
11 import re
12 import argparse
13
14 def write_raw_sequence(tn, seq):
15 sock = tn.get_socket()
16 if sock is not None:
17 sock.send(seq)
18
19 # Define command line argument interface
20 parser = argparse.ArgumentParser(description='Stream g-code file to Smoothie over telnet.')
21 parser.add_argument('gcode_file', type=argparse.FileType('r'),
22 help='g-code filename to be streamed')
23 parser.add_argument('ipaddr',
24 help='Smoothie IP address')
25 parser.add_argument('-q','--quiet',action='store_true', default=False,
26 help='suppress output text')
27 parser.add_argument('-l','--log',action='store_true', default=False,
28 help='suppress output text and output to file (gcode file with .log appended)')
29 args = parser.parse_args()
30
31 f = args.gcode_file
32 verbose = not (args.quiet or args.log)
33
34 # Stream g-code to Smoothie
35 print("Streaming " + args.gcode_file.name + " to " + args.ipaddr)
36 outlog = None
37 if args.log:
38 outlog = open(args.gcode_file.name + ".log", 'w')
39
40 tn = telnetlib.Telnet(args.ipaddr)
41 # turn on prompt
42 #write_raw_sequence(tn, telnetlib.IAC + telnetlib.DO + "\x55")
43
44 # read startup prompt
45 tn.read_until("Smoothie command shell")
46
47 okcnt= 0
48 linecnt= 0
49 for line in f:
50 tn.write(line)
51 linecnt+=1
52 rep= tn.read_eager()
53 okcnt += rep.count("ok")
54 if verbose: print("SND " + str(linecnt) + ": " + line.strip() + " - " + str(okcnt))
55 if args.log: outlog.write("SND " + str(linecnt) + ": " + line.strip() + " - " + str(okcnt) + "\n" )
56 print("Waiting for complete...")
57
58 while okcnt < linecnt:
59 rep= tn.read_some()
60 okcnt += rep.count("ok")
61 if verbose: print(str(linecnt) + " - " + str(okcnt) )
62 if args.log: outlog.write(str(linecnt) + " - " + str(okcnt) + "\n" )
63
64
65 if args.log: outlog.close()
66 tn.write("exit\n")
67 tn.read_all()
68
69 print("Done")
70
71
72