Catching a direct redirect to /dev/tty

后端 未结 4 2065
抹茶落季
抹茶落季 2021-01-05 23:29

I\'m working on an application controller for a program that is spitting text directly to /dev/tty.

This is a production application controller that must be able to

相关标签:
4条回答
  • 2021-01-05 23:45
     screen -D -m yourEvilProgram
    

    should work. Much time passed sinced I used it, but if you need to read some of its output it could even be possible that you could utilize some sockets to read it.

    [Added: two links, Rackaid and Pixelbeat, and the home page at GNU]

    0 讨论(0)
  • 2021-01-05 23:52

    The classic solution to controlling an application like this is Expect, which sets up pseudo-terminals, does logging, and drives the controlled application from a script. It comes with lots of sample scripts so you can probably just adapt one to fit your needs.

    0 讨论(0)
  • 2021-01-05 23:57

    I can't quite determine whether the screen program mentioned by @flolo will do what you need or not. It may, but I'm not sure whether there is a logging facility built in, which appears to be what you need.

    There probably is a program out there already to do what you need. I'd nominate sudosh as a possibility.

    If you end up needing to write your own, you'll probably need to use a pseudo-tty (pty) and have your application controller sit in between the user's real terminal connection and the the pty device, where it can log whatever you need it to log. That's not trivial. You can find information about this in Rochkind's "Advanced UNIX Programming, 2nd Edn" book, and no doubt other similar books (Stevens' "Advanced Programming in the UNIX Environment" book is a likely candidate, but I don't have a copy to verify that).

    0 讨论(0)
  • 2021-01-06 00:08

    This is what I did in python

    import pty, os
    
    pid, fd = pty.fork()
    if pid == 0: # In the child process execute another command
        os.execv('./my-progr', [''])
        print "Execv never returns :-)"
    else:
        while True:
            try:
                print os.read(fd,65536),
            except OSError:
                break
    
    0 讨论(0)
提交回复
热议问题