Interacting with another command line program in Python

后端 未结 2 1722
轮回少年
轮回少年 2021-02-02 02:55

I need to write a Python script that can run another command line program and interact with it\'s stdin and stdout streams. Essentially, the Python script will read from the tar

相关标签:
2条回答
  • 2021-02-02 03:26

    see the question wxPython: how to create a bash shell window?

    there I have given a full fledged interaction with bash shell reading stdout and stderr and communicating via stdin

    main part is extension of this code

    bp = Popen('bash', shell=False, stdout=PIPE, stdin=PIPE, stderr=PIPE)
    bp.stdin.write("ls\n")
    bp.stdout.readline()
    

    if we read all data it will get blocked so the link to script I have given does it in a thread. That is a complete wxpython app mimicking bash shell partially.

    0 讨论(0)
  • 2021-02-02 03:27

    To perform such detailed interaction (when, outside of your control, the other program may be buffering its output unless it thinks it's talking to a terminal) needs something like pexpect -- which in turns requires pty, a Python standard library module that (on operating systems that allow it, such as Linux and Mac OS x) implements "pseudo-terminals".

    Life is harder on Windows, but maybe this zipfile can help -- it's supposed to be a port of pexpect to Windows (sorry, I have no Windows machine to check it on). The project in question, called wexpect, lives here.

    0 讨论(0)
提交回复
热议问题