我正在Python 2.6的GUI前端上工作,通常它非常简单:您使用subprocess.call()或subprocess.Popen()发出命令,然后等待命令完成或对错误做出反应。如果您有一个程序停止并等待用户交互,该怎么办?例如,程序可能会停止并要求用户提供ID和密码或如何处理错误?
subprocess.call()
subprocess.Popen()
c:\> parrot Military Macaw - OK Sun Conure - OK African Grey - OK Norwegian Blue - Customer complaint! (r) he's Resting, (h) [Hit cage] he moved, (p) he's Pining for the fjords
到目前为止,我所阅读的所有内容都告诉您如何仅 在 程序完成 后 读取程序的所有输出,而不是如何在程序仍在运行时处理输出。我无法安装新模块(这是针对LiveCD的),并且我将多次处理用户输入。
查阅子流程手册。你有选择subprocess,以便能够重定向stdin,stdout以及stderr过程中你打电话给你自己。
subprocess
stdin
stdout
stderr
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
您还可以逐行与过程交互。给定为prog.py:
prog.py
import sys print 'what is your name?' sys.stdout.flush() name = raw_input() print 'your name is ' + name sys.stdout.flush()
您可以通过以下方式逐行与其交互:
>>> 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'
编辑:在python3中,它必须为'mike'.encode()。
'mike'.encode()