到目前为止,我已经获得了很多帮助,并且能够成功地组建一个Python脚本。该脚本基本上调用Windows可执行文件,然后执行一些操作,例如从远程服务器下拉一些文件。在脚本结束时,我有一个执行压缩的功能,并将检索到的文件移动到另一个服务器。到目前为止,脚本运行良好,但现在看起来我已经遇到了障碍。
该脚本基本上接受ParentNumber作为输入,并找到1个或多个ChildNumbers。收集ChildNumbers列表后,脚本会反复调用带有该数字的Windows可执行文件,直到它完成为所有这些数据提取数据。
如上所述,我在脚本末尾调用了存档,移动文件和电子邮件通知的功能,如果只有一个ChildNumber,该功能可以正常工作。如果有许多ChildNumbers,当可执行文件在第二个ChildNumber上移动时,命令行有点将其视为end和stats,其中包含如下所示的新行:
.........
C:\Scripts\startscript.py
Input> ParentNumber
Retrieval started
Retrieval finished
**Email Sent Successfully**
Preparing ParentNumber @childNumber
C:\Scritps\ParentNumber123\childNumber2
Retrieval Started
Retrieval finished
.........
`
如果您看到“已成功发送电子邮件”消息上方的脚本流仅显示在第一个ChildNumber下,这意味着它在脚本完成之前被调用。
我想要的实际行为是,一旦处理了所有ChildNumbers,就应该调用所有ArchiveMoveEmailFunction,但不确定它出错的地方。
我的ArchiveMoveEmailFunction函数如下所示,它位于脚本中所有其他行的结尾处:
def archiveMoveEmailNotification(startTime, sender, receivers):
"""
Function to archive, move and email
"""
Code for Archive
Code for Move to remote server
Code for email
archiveMoveEmailNotification(startTime, sender,receivers)
如果我在这里遗漏了一些内容,请告诉我何时应该执行此功能。如上所述,如果ParentNumber只有1个ChildNumber,它的工作完全正常,因此不确定第二次检索跳转是否会导致某些问题。有没有办法我可以让这个函数等到脚本中的其余函数被调用,或者将这个函数完全移动到另一个脚本并从主脚本中调用该函数是合乎逻辑的?
这是exe调用部分:
def execExe(childNumb):
cmd = "myExe retriveeAll -u \"%s\" -l \"%s\"" % (childNum.Url(),childAccount.workDir))
return os.system(cmd)
def retriveChildNumb(childNumb):
#Run the retrive
if not (execExe(childNumb)==0):
DisplayResult(childNumb,3)
else:
DisplayResult(childNumb,0)
return 0
任何关于此的输入想法都非常有用。
答案 0 :(得分:1)
你的问题很冗长但很难理解;提供代码可以更容易地进行故障排除。
那就是说,我怀疑你用来调用Windows可执行文件的代码是异步的,这意味着你的程序继续(并完成)而不等待可执行文件返回一个值。