是否可以从 Ruby 运行 VBScript?我有几个脚本可以自动执行 SAP 系统中的某些任务,目前我正在从 Excel 中运行它们。
我想将其移至 Ruby,我的其他模块就位在那里。这可能吗?如果可以,我该如何实现这一目标?
编辑
更多背景信息:
我正在使用 VBScript 在某些 SAP 事务中执行一些重复的日常任务。我必须将一些数据传入和传出 SAP 系统。我已将 VBScript 集成到 VBA 中,并通过 Excel 运行它们,如有必要,我还会在 Excel 中解析数据。我还将一些变量(用户、交易等)传递给脚本。
现在我需要将这部分从 Excel 移至我的 Ruby 应用程序并在那里触发这些 VBScript,同时收集返回的数据并在 Ruby 应用程序中使用它们。
@nmiranda:我已经浏览了很多 SCN 资源(也是你提到的那个),但我无法使用 ES,因为我没有相应的用户级别。另一种选择是使用 RFC 连接到系统并执行任务 ( https://github.com/mydoghasworms/nwrfc ),但我还没有取得任何成功。
所以我想我应该尝试如上所述从 Ruby 运行 VBScript。然而,这样做还需要我将这些变量作为参数传递给 VBScript。
示例:
- 运行 ruby 脚本并将参数传递给 VBScript
- 运行 VBScript
- 在系统中执行任务
- 离开系统
- 解析从系统接收的数据(并非总是如此)
到目前为止,我已经搜索了执行此操作的可能性,但尚未找到下面答案中提到的资源。而且我对此的了解非常有限,因此我在这里提问。
现在我已经尝试了下面的建议并且有效:)
require 'open3'
stdin, stdout, stderr = Open3.popen3('cscript my_script.vbs')
我调用上面的脚本,这会在已经打开的系统中执行任务。
这是最好的方法吗?并且,是否可以将参数传递给 VBScript?
我像这样传递参数:
require 'open3'
stdin, stdout, stderr = Open3.popen3('cscript my_script.vbs 0001')
并像这样在我的 VBScript 中捕获它们:
WScript.Arguments(0)
这是正确的方法吗?它似乎有效,我只需要确认...
问候
塞巴
最佳答案
基于“5 ways to run commands from ruby”我选择使用popen3
:
master.rb:
require 'open3'
stdin, stdout, stderr = Open3.popen3('cscript ../vbs/slave.vbs')
puts stdout.readlines
puts stderr.readlines
slave.vbs:
WScript.StdOut.WriteLine "slave: stdout"
WScript.StdErr.WriteLine "slave: stderr"
输出:
ruby master.rb
slave: stdout
slave: stderr
ruby -v
ruby 1.9.2p180 (2011-02-18) [i386-mingw32]
关于ruby - 使用 Ruby 运行 VBS 脚本,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31619268/