我手头有一个问题,需要我将命令提示符作为不同的进程生成并向其发送一些命令并捕获/解析命令输出。这种交互需要采用父子进程的形式,也就是说所有命令都可以放在一个 ruby 文件中,并且在运行 ruby 文件时,命令被发送到控制台(命令提示符)并从中接收输出并在 ruby 脚本中处理。
我要遵循的一般逻辑是:
- 使用 fork 生成不同的进程并获取进程 ID
- 获取流程的流
- 写入进程的输入流并从输出流中读取。
我使用的环境是安装了 Ruby 1.9.2 的 Windows XP 机器。我下载了在这里找到的 win32-process 库。通过使用该库,我可以按如下方式执行第 1 步
require 'win32/process'
APP_NAME = "C:\\Windows\\system32\\cmd.exe"
process_info = Process.create(:app_name => APP_NAME,
:creation_flags => Windows::Process::CREATE_NEW_CONSOLE,
:process_inherit => false,
:thread_inherit => true,
:cwd => "C:\\"
)
由于 win32-process 库是基于在 windows 上使用进程和线程的,因此我尝试通过MSDN帮助查看它。在阅读创建控制台文章时,我发现 GetStdHandle 方法可用于获取输入和输出流的句柄。但是,我在 win32 进程中的任何地方都找不到这种方法。
有人可以为我提供一些关于如何进行步骤 2 和 3 的指导吗?
另外,有没有其他方法可以用来解决手头的问题?
另外,我想了解更多关于进程间通信或一般进程的产生和分叉的信息,所以有人可以告诉我一些我可以研究它们的好的参考吗?
提前致谢