Before, we sent ^D, but didn't read past the prompt that appeared. This
put us one command behind the most recent, causing all manner of mayhem.
It's all fixed now I believe, but this really shows the need for unit
testing. I'm working on that.
This removes any garbage that the Sink may have in its buffer, e.g.
partially entered commands or nonsense that appeared when moving the
device to/from a VM.
One extra dependency is pulled in for Python versions older than 3.6,
but other than that it's pretty easy to support them. It definitely
works on 2.7 now, and should work on older 3.x versions (but that's
untested).
Now the port is not part of the API, there's a method to close it,
__init__ can take a string in addition to the objects it used to take,
and the class is a context manager for the with statement. I can
confidently say that these are all great changes.
The timeout was a dirty hack from the start. It was long enough that
commands have finished running by the time it completes, but it wasn't
the right way to see when a command finished running. The right way is
to look for the PDBS) prompt, which is what we do now.
This makes the Sink.set_tmpcfg method run noticeably faster. Neat.