是否可以从Ruby运行VBScript?我有几个脚本来自动化SAP系统中的某些任务,我目前正在从Excel运行它们。
我想把它移到Ruby,我的其他模块就位。这是可能的,如果是的话,我该如何做到这一点?
修改
更多背景信息:
我正在使用VBScripts在某些SAP事务中执行一些重复的日常任务。我必须在SAP系统中携带一些数据。我已经将VBScripts集成到VBA,我通过Excel运行它们,如果需要,我还会解析数据。我也将一些变量(用户,交易等)传递给脚本。
现在我需要将这部分从Excel移动到我的Ruby应用程序并在那里触发这些VBScripts,并收集返回的数据并在Ruby应用程序中使用它们。
@nmiranda:我经历了很多SCN资源(也就是你提到的那个),但我不能使用ES,因为我没有适当的用户级别。另一种选择是使用RFC连接到系统并执行任务(https://github.com/mydoghasworms/nwrfc),但我还没有取得任何成功。
所以我想我会尝试从Ruby运行VBScripts,如上所述。但是,这样做也需要我将这些变量作为参数传递给VBScripts。
示例:
到目前为止,我已经搜索了这样做的可能性,但我没有找到下面答案中提到的资源。我对此的了解非常有限,因此我在这里问过。
现在我尝试了下面的建议并且有效:)
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)
这是正确的方法吗?它似乎有效,我只需要确认......
问候
西巴
答案 0 :(得分:2)
根据“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]