【发布时间】:2023-01-17 23:59:31
【问题描述】:
我正在运行 python pexpect 来自动化一个名为 IRIS 的应用程序
我只是输入一整套只有 2 个命令。例如:
set db=##Class(SYS.Database).%OpenId("/document-txt")
if db.Mirrored=0 {w "/document-txt/IRIS.DAT NOT mirrored"} else {w "/document-txt/IRIS.DAT mirrored"}
第一个命令设置变量 db,第二个命令是 IRIS“objectscript”中的“if”语句 它测试是否在第一个命令中设置了变量并输出文本消息
如果我手动输入命令,会话应该如下所示:
%SYS>set db=##Class(SYS.Database).%OpenId("/analytics")
%SYS>if db.Mirrored=0 {w "/analytics/IRIS.DAT NOT mirrored"} else {w "/analytics/IRIS.DAT mirrored"}
/analytics/IRIS.DAT NOT mirrored
%SYS>set db=##Class(SYS.Database).%OpenId("/anlt-facts")
%SYS>if db.Mirrored=0 {w "/anlt-facts/IRIS.DAT NOT mirrored"} else {w "/anlt-facts/IRIS.DAT mirrored"}
/anlt-facts/IRIS.DAT NOT mirrored
%SYS>set db=##Class(SYS.Database).%OpenId("/anlt-historylogs")
%SYS>if db.Mirrored=0 {w "/anlt-historylogs/IRIS.DAT NOT mirrored"} else {w "/anlt-historylogs/IRIS.DAT mirrored"}
/anlt-historylogs/IRIS.DAT NOT mirrored
这就是我 [从预期日志] 得到的:
%SYS>set db=##Class(SYS.Database).%OpenId("/trak/analytics")
set db=##Class(SYS.Database).%OpenId("/analytics")
%SYS>if db.Mirrored=0 {w "/analytics/IRIS.DAT NOT mirrored"} else {w "/analytics/IRIS.DAT mirrored"} set db=##Class(SYS.Database).%OpenId("/anlt-facts")
if db.Mirrored=0 {w "/analytics/IRIS.DAT NOT mirrored"} else {w "/analytics/IRIS.DAT mirrored"}
/analytics/IRIS.DAT NOT mirrored
%SYS>if db.Mirrored=0 {w "/anlt-facts/IRIS.DAT NOT mirrored"} else {w "/anlt-facts/IRIS.DAT mirrored"}
%SYS>if db.Mirrored=0 {w "/anlt-facts/IRIS.DAT NOT mirrored"} else {w "/anlt-facts/IRIS.DAT mirrored"}
/anlt-facts/IRIS.DAT NOT mirrored
%SYS>if db.Mirrored=0 {w "/anlt-historylogs/IRIS.DAT NOT mirrored"} else {w "/anlt-historylogs/IRIS.DAT mirrored"}
set db=##Class(SYS.Database).%OpenId("/anlt-local")
if db.Mirrored=0 {w "/anlt-local/IRIS.DAT NOT mirrored"} else {w "/anlt-local/IRIS.DAT mirrored"}
set db=##Class(SYS.Database).%OpenId("/anlt-localsys")
set db=##Class(SYS.Database).%OpenId("/anlt-historylogs")
%SYS>
%SYS>if db.Mirrored=0 {w "/anlt-historylogs/IRIS.DAT NOT mirrored"} else {w "/anlt-historylogs/IRIS.DAT mirrored"}
/anlt-historylogs/IRIS.DAT NOT mirrored
任何人都可以看出为什么 pexecect 没有以正确的顺序执行命令吗?那就是一行一行
它似乎在排队一些命令。
我给了 5 秒来执行每个命令,这应该足够了。
这是代码:
----Starting the IRIS session
s = pexpect.spawn('bash',echo=False)
s.logfile=open("/tmp/IRIS.log","wb")
s.expect('#')
s.sendline('iris session')
s.expect('%SYS>')
----Sending the commands from a file:
file1 = open('/tmp/mstatus', 'r')
for line in file1:
s.sendline(line)
try:
status=s.expect('%SYS>')
time.sleep(5)
except pexpect.TIMEOUT:
print(f"IRIS session command prompt at {count}.. timeout")
s.interact()
except pexpect.EOF:
print(f"IRIS session command prompt at {count} - Child process died")
s.interact()
except pexpect.ExceptionPexpect as e:
print(f"IRIS session command prompt at {count}")
print(e)
s.interact()
file1.close()
【问题讨论】:
-
请缩进您的 Python 代码,使其可读且语法正确。
标签: pexpect