在Delphi中启动两个进程并用管道连接它们
我需要在我的程序中启动两个外部程序,并将第一个程序的 STDOUT 连接到第二个程序的 STDIN。如何在 Delphi 中实现这一目标(RAD Studio 2009,如果重要的话)?我是在Windows环境下操作的。
作为命令行命令,我的情况将如下所示:
dumpdata.exe | encrypt.exe "mydata.dat"
I need to launch two external programs in my program and connect the STDOUT of the first one to the STDIN of the second program. How can you achieve this in Delphi (RAD Studio 2009, if it matters)? I'm operating in Windows environment.
As a commandline command my situation would look something like this:
dumpdata.exe | encrypt.exe "mydata.dat"
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(4)
一个似乎有效的快速测试(深受 JCL 的启发):
child1:说“你好,世界!” ' 3x 到标准输出
child2:将标准输入上出现的任何内容回显到 OutputDebugString(可以通过 查看DebugView)
parent:启动child1重定向到child2
A quick test which seems to work (inspired heavily by JCL):
child1: say 'Hello, world!' 3x to standard output
child2: echo whatever comes on standard input to OutputDebugString (can be viewed by DebugView)
parent: launch child1 redirected to child2
CreateProcess() 允许您重定向启动的应用程序的标准输入和标准输出。您的应用程序可以从第一个应用程序标准输出读取数据并写入第二个应用程序标准输入。
CreateProcess() allows you to redirect both stdin and stdout of application launched. Your application can read from the first app stdout and write to the second app stdin.
以下是在 Delphi XE 中运行的更正代码。
命令行字符串必须是变量,并且也在 ExecutePiped 函数上方定义。
为了测试,我修改了 Child2.pas 以将接收到的文本写入文件中。
Here is the corrected code to work in Delphi XE.
The CommandLine Strings must be variables and also defined above the ExecutePiped function.
To test I have modified Child2.pas to write the received text into a file.
这种方法应该有效。在担心从 Delphi 调用它之前,请通过在命令提示符窗口(DOS 窗口)中运行来解决命令行问题。
然后只需使用 WinExec 或 ShellExecute 从 Delphi 调用该命令即可。可以选择拨打并等待,或者只是“即发即忘”。
That approach should work. Before worrying about calling it from Delphi, get the command line worked out by running in a command prompt window (DOS window).
Then just call that command from Delphi with WinExec or ShellExecute. There are options for calling and waiting, or just "fire and forget".