Python subprocess and user interaction

后端 未结 1 1143
逝去的感伤
逝去的感伤 2020-11-27 04:45

I\'m working on a GUI front end in Python 2.6 and usually it\'s fairly simple: you use subprocess.call() or subprocess.Popen() to issue the command

相关标签:
1条回答
  • 2020-11-27 05:43

    Check out the subprocess manual. You have options with subprocess to be able to redirect the stdin, stdout, and stderr of the process you're calling to your own.

    from subprocess import Popen, PIPE, STDOUT
    
    p = Popen(['grep', 'f'], stdout=PIPE, stdin=PIPE, stderr=STDOUT)
    
    grep_stdout = p.communicate(input='one\ntwo\nthree\nfour\nfive\nsix\n')[0]
    print grep_stdout
    

    You can also interact with a process line by line. Given this as prog.py:

    import sys
    print 'what is your name?'
    sys.stdout.flush()
    name = raw_input()
    print 'your name is ' + name
    sys.stdout.flush()
    

    You can interact with it line by line via:

    >>> from subprocess import Popen, PIPE, STDOUT
    >>> p = Popen(['python', 'prog.py'], stdout=PIPE, stdin=PIPE, stderr=STDOUT)
    >>> p.stdout.readline().rstrip()
    'what is your name'
    >>> p.communicate('mike')[0].rstrip()
    'your name is mike'
    

    EDIT: In python3, it needs to be 'mike'.encode().

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