(or virtual ports (on Linux))
$ sudo apt install socat
$ socat -d -d pty,raw,echo=0 pty,raw,echo=0
2016/11/13 16:33:30 socat[18425] N PTY is /dev/pts/5
2016/11/13 16:33:30 socat[18425] N PTY is /dev/pts/6
2016/11/13 16:33:30 socat[18425] N starting data transfer loop with FDs [3,3] and [5,5]
It creates ports `/dev/pts/5` and `/dev/pts/6`
You read from `/dev/pts/6` and write to `/dev/pts/5`
$ cat < /dev/pts/6
$ echo "Hello" > /dev/pts/5
PySerial: Short introduction