【问题标题】:Running VBS script with Ruby使用 Ruby 运行 VBS 脚本
【发布时间】:2015-07-24 20:30:23
【问题描述】:

是否可以从 Ruby 运行 VBScript?我有几个脚本可以自动执行 SAP 系统中的一些任务,我目前正在从 Excel 中运行它们。

我想把它移到我的其他模块所在的 Ruby 上。这可能吗?如果可以,我该如何实现?

编辑

更多背景信息:

我正在使用 VBScripts 在某些 SAP 事务中执行一些重复的日常任务。我必须携带一些数据进出 SAP 系统。我已将 VBScripts 集成到 VBA 中,并通过 Excel 运行它们,如有必要,我还会在其中解析数据。我还将一些变量(用户、事务等)传递给脚本。

现在我需要将这部分从 Excel 移动到我的 Ruby 应用程序并在那里触发这些 VBScript,同时收集返回的数据并在 Ruby 应用程序中使用它们。

@nmiranda:我浏览了很多 SCN 资源(也是你提到的那个),但是我不能使用 ES,因为我没有相应的用户级别。另一种选择是使用 RFC 连接到系统并执行任务 (https://github.com/mydoghasworms/nwrfc),但我还没有成功。

所以我想我会尝试如上所述从 Ruby 运行 VBScript。但是,这样做还需要我将这些变量作为参数传递给 VBScript。

例子:

  1. 运行 ruby​​ 脚本并将参数传递给 VBScript
  2. 运行 VBScript
  3. 在系统中执行任务
  4. 离开系统
  5. 解析从系统接收到的数据(并非总是如此)

到目前为止,我已经搜索了执行此操作的可能性,但我没有找到以下答案中提到的资源。另外我对这方面的了解非常有限,所以在这里问了。

现在我已经尝试了下面的建议并且它有效:)

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)

这是正确的方法吗?它似乎有效,我只需要确认...

问候

塞巴

【问题讨论】:

  • 您想运行调用 SAP 函数的 VBScript?直接从 Ruby 调用 SAP 功能模块不是更好吗?在 SCN 中找到此链接:scn.sap.com/docs/DOC-18389。检查它是否有帮助。
  • 欢迎来到 Stack Overflow。你试过什么?有很多方法可以运行子 shell 和命令,因此将它们全部列出将超出 SO 的范围。相反,请告诉我们您的尝试,我们会帮助您解决问题。
  • 请看上面的编辑。

标签: ruby vbscript sap


【解决方案1】:

基于“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]

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-06-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-12-02
    相关资源
    最近更新 更多