import sys
from subprocess import Popen, PIPE; STDOUT
pyversion = sys.version_info.major
class interact():
def __init__(self, c):
self.handle = Popen(c, stdin=PIPE, stdout=PIPE, stderr=STDOUT, shell=True)
sleep(1)
def send(self, what):
for c in what:
sys.stdout.write(c)
if pyversion == 3:
self.handle.stdin.write(bytes(c, 'UTF-8'))
else:
self.handle.stdin.write(c)
sys.stdout.flush()
sys.handle.stdin.flush()
sleep(0.05)
def getrow(self):
return self.handle.stdout.readline()
def poll(self):
return self.handle.poll()
def done(self):
if self.poll() == 1:
return 'Return Y'
return 'Return X'
def close(self):
self.handle.stdout.close()
self.handle.stdin.close()
您可以这样做,其中您有自己的结构,并根据退出代码或当前运行代码返回所需的任何内容,如果进程尚未完成,则返回None。在
只需将其用作:
^{pr2}$
或者tweek-it,我在进行SSH调用和生成OpenSSL密钥时使用了这段代码作为一个基本结构,工作起来很有魅力,但我认为我必须要用tweek它才能使它与SSH一起工作(找不到代码atm)
您可以添加以下内容:
^{3}$
在done()中,如果发生错误,只需返回Z(如您所述)。在
注意:如果您不调用getrow()在一个沉重的输出脚本/命令上,缓冲区将溢出并挂起整个内容,因此请确保您偶尔点击该脚本或删除stdout=PIPE, stderr=STDOUT。在