try函数超时我有一个脚本可以调用许多其他脚本来报告设备和构建报告的过程。 有时,来自流程工具的数据包含 JMP 无法处理的错误。所以我将调用包装在 Try() 函数中,如下所示:
For(ii=1, ii < nitems(BulkScriptsToRun), ii++,
try(
Include( BulkScriptsToRun[ii] );
);
);
有时,包含的脚本不会崩溃,但也不会完成。
虽然这可能可以通过编辑脚本及其处理数据的方式来解决,但它们不是我要编辑的脚本。
例如,如果需要超过 1 小时,是否有办法让 try 函数认为尝试失败?
还有其他方法可以实现这一目标吗? 有没有办法告诉 Try() 应该放弃?
谢谢
自动化和脚本编写回复:try函数超时一方需要另一方工作吗?如果您的主脚本实际上只是包含一堆单独的脚本,为什么不将每个脚本作为不同的任务运行呢?那么就没有关系了。每个人都会打开自己的 JMP 实例并运行,然后关闭 JMP。您也可以单独控制每个的超时。
回复:try函数超时我正在从任务计划程序运行主脚本。我可以在那里超时。 但是,如果其中一个脚本每小时、日复一日地出现相同的错误,则列表中该脚本下方的所有脚本都将永远不会运行。
他们按照主脚本的组织方式,列表中后面的脚本运行频率较低,因此可能需要几周的时间才能注意到它们被完全跳过。我可以颠倒列表的顺序 - 但是每次需要每 10 分钟运行一次的脚本都会被跳过,直到我修复有问题的脚本中的问题(这更糟糕)。
此外,主脚本会在所有脚本运行后报告其自身的进度。如果任务被终止,这种情况就永远不会发生。
我目前的解决方案是:注释掉有问题的脚本并等待责任方足够关心来修复它。
有用。
回复:try函数超时如果您无法修改脚本,这听起来确实可以使用 Windows 任务计划程序来完成。 创建包含其他脚本的脚本,管理“包含”脚本中可以包含的所有错误,并向调度程序任务添加超时。 超时后,它将终止执行。
一般来说,运行一批您无法控制的脚本很快就会变得混乱,因为您可能必须处理很多不同的事情(我不得不做这样的事情)。 以下是我遇到的一些问题(或改进的机会):
- 管理命名空间冲突
- 删除/清除不需要的符号
- 避免脚本不使用默认名称的情况(1)
- 避免使用包含的脚本中的清除符号/删除全局变量
- 关闭不必要的数据表和报告以节省内存
- 捕获会停止 JMP 的错误
- 在包含的脚本中使用退出/退出
- 记录脚本执行情况以了解哪些内容正确执行
通过训练/修改所包含的脚本,大多数问题都更容易处理。
回复:try函数超时不,try()没有超时机制;它与 C++ 的 try-throw-catch 机制非常相似。 正如您所猜测的,您需要将逻辑放入每个包含的脚本中,这可以执行类似的操作
startSeconds = tickSeconds();
...
while(...
if( tickseconds() - startSeconds > 100, throw("Used more than 100 seconds") );
...)
我知道您说过您无法打开这些脚本进行编辑,但如果您这样做了,您可能希望它们对您的代码进行回调以指示进度。 然后,如果需要,您可以从回调中进行抛出。 无论哪种方式,您都需要在每个脚本中找到循环重复某些内容的点,并且超时取决于脚本是否表现良好(以继续检查时间)。
Windows 任务调度程序也可能是解决方案的一部分;我没有使用过它,但有很多线程询问有关它的问题。 我可以从脚本中关闭 jmp 程序吗?可能会建议一些东西。