gpt4 book ai didi

perl - 如何在Delphi中自动化perl脚本?

转载 作者:行者123 更新时间:2023-12-03 15:58:56 25 4
gpt4 key购买 nike

目前,我正在开发一个delphi应用程序。我需要从 delphi 应用程序运行 perl 脚本。更清楚地说,我们在 unix 窗口中手动执行 perl 脚本。现在我需要从应用程序自动执行该 perl 脚本。

我尝试使用 ShellExecute:

ShellExecute(Handle, 'open', PChar('C:\loaderperl.bat'), nil, nil, SW_SHOW);

窗口闪烁一秒钟然后关闭。我不知道脚本是否执行了。

您好,感谢您的所有回答,对于我迟到的回复深表歉意。我仍然在与这种自动化斗争。现在我将清楚地解释该过程,目前我打开putty窗口,连接到远程计算机并执行perl脚本。 Perl 脚本依次调用存储过程并更新表。现在我想通过单击按钮自动执行上述过程。因此,当我单击按钮时,它应该调用一个连接到远程计算机的函数,然后执行 perl 脚本。我说清楚了吗???请帮忙解决这个问题。我需要 delphi 中的这段代码

最佳答案

(根据下面的评论进行编辑。)

这需要几个步骤:首先,实际运行脚本;其次,检查它是否成功运行(它设法启动一个新进程并且该进程成功。)

第 1 部分,运行脚本:

要从 Delphi 应用程序运行脚本,请使用 ShellExecuteEx 使用“open ”动词应该可以工作(更多详细信息请参阅下面的标志。)如果脚本与 Perl 可执行文件关联,则可以执行脚本本身,或者使用脚本作为命令行参数来运行 Perl exe。

This article看起来是使用这个 API 及其更简单的表兄弟的一个很好的起点 ShellExecute .

ShellExecute[Ex]函数通常期望您的应用程序随后运行消息循环。您的应用程序不太可能不是,只要用户单击按钮启动此应用程序后,您的应用程序就会处于空闲状态,但如果由于某种原因它不会空闲,您应该传递 SEE_MASK_NOASYNC旗帜。 MSDN 有很多信息。

第 2 部分,检查它是否成功执行并成功完成其任务:

要查看脚本是否执行,您应该获取已启动进程的进程句柄,如果有新进程,请检查该进程的退出代码。您应该修改脚本,以便在任务失败时返回非零代码。 (我不熟悉 Perl,所以我不能具体告诉你如何操作,但通常它是“main”函数或其他第一个/启动函数的返回值。)你可以通过以下方式执行此操作:

  • 传入SEE_MASK_NOCLOSEPROCESS标记为ShellExecuteEx 。这将填充 hProcess您通过进程句柄传入的结构体的成员,如果它成功启动了一个进程(如果没有,请检查 GetLastError 以找出原因。)如果这就是您需要知道的全部(只是它是否启动,则无需了解它是否启动)成功了)那么你就完成了。
  • 可选:使用 WaitForSingleObject(YourParamStruct.hProcess, INFINITE) 等待进程结束(当然,如果你有一个有效的 hProcess)
  • 调用 GetExitCodeProcess 找到退出代码。 (检查它是否返回 STILL_ACTIVE ,如果它仍在运行,请等待并重试。)通常,它应该以 0 退出。以表明成功。您应该修改脚本,以便在出现问题时返回非零值。您可以根据需要使代码简单或复杂 - 例如,返回 1对于任何错误,或者按错误类型划分多个代码。 (避免使用 259 ,因为这是 STILL_ACTIVE 的值 - 这样做可能会导致您的 Delphi 代码进入无限循环,具体取决于它的编码方式,认为它仍在等待获取退出代码,因为 Perl 脚本仍在运行事实并非如此。)

然后,您的 Delphi 应用程序可以检查此代码以查看 Perl 脚本是否有效,并在失败时执行某些操作 - 记录消息、告诉用户等。

另一件事 - 你说你只是想知道脚本是否执行,上面应该提供这一点。鉴于它是 Perl 脚本并在命令行上运行,您可能想要做的另一件事是获取其输出,如果不返回错误代码则扫描错误,或者记录或向用户显示。您可以通过 CreateProcess 运行它来完成此操作和 capturing the output 。不过,根据您的说法,这对于您所追求的目标来说可能有点过分了!

关于perl - 如何在Delphi中自动化perl脚本?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1720455/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com