我有一个在delphi中编码的命令行应用程序,我需要从普通的桌面应用程序(也用delphi编写)调用 . 简而言之,我想调用命令行应用程序并在列表框中显示它“实时”输出的文本 .
自从我使用shell以来已经很久了,但我清楚地记得,为了从命令行应用程序中获取文本 - 我必须使用管道符号“>” . 像这样:
C:/mycmdapp.exe> c:/result.txt
这将打印到shell的任何文本(使用writeLn)并将其转储到名为“result.txt”的文本文件中 .
但是......(这里有泡菜),我想要一个实时结果而不是一个积压文件 . 一个典型的例子是Delphi编译器本身 - 它设法向IDE报告发生了什么 . 如果我的记忆正确地为我服务,我似乎记得我必须创建一个“管道”通道(?),然后将管道名称分配给shell调用 .
我试图谷歌这个但我老实说不确定如何制定它 . 希望社区中的某些人能指出我正确的方向 .
Updated :此问题可能与How do I run a command-line program in Delphi?相同 . 虽然 Headers 和问题本身并不相同,但有些答案符合我的要求 .
2 回答
像往常一样,Zarco Gajic有一个解决方案:Capture the output from a DOS (command/console) Window . 这是他的文章的副本,以供将来参考:
Update: 以上示例一步读取输出 . 以下是DelphiDabbler中的另一个示例,显示了在进程仍在运行时如何读取输出:
您可能已经在硬盘上有了代码:JCL(JEDI代码库)的
JclSysUtils
单元中的Execute
函数可以满足您的需求:您可以为其提供回调过程:
TTextHandler = procedure(const Text: string) of object;