执行基本的Windows命令

时间:2015-09-03 11:23:22

标签: ruby

我想使用win32ole来实现这一点,而不是在ruby中执行shell命令的任何其他方法。

require 'win32ole'
shell = WIN32OLE.new('Shell.Application')
my_username = shell.ShellExecute('cmd.exe', 'username', '', 'open', 0)
puts my_username

#Current output => nil

只想打印我的用户名,但通常想要执行任何命令并获取其输出。我知道我们有ENV['user']echo %username%给了我想要的但只想使用win32ole。

提前多多感谢。

2 个答案:

答案 0 :(得分:1)

您应该尝试使用whoami代替username

require 'win32ole'
shell = WIN32OLE.new('Shell.Application')
my_username = shell.ShellExecute('cmd.exe', 'whoami', '', 'open', 0)
puts my_username

<击>

无法使用ShellExecute(),因为它不允许您访问您想要的运行命令的输出。有关该点的更多信息,请参阅Using ShellExecuteEx and capturing standard in/out/err

我会简单地使用puts ENV['USERNAME'],就像魅力一样。 (或者 Ilia Aptsiauri 在他的回答中给出的任何命令)

答案 1 :(得分:0)

如果您只想执行Windows CLI命令,则需要采取一些不同的方法。 而不是whoami你可以放任何你想要的命令

  • system("whoami")
  • `whoami`(这些是反叛)
  • spawn("whoami")

这些之间的区别如下

  • 系统等待&#34;命令&#34;已经完成并输出一切 到$ stdout。然后根据exitstatus返回true或false。
  • 反引号也会等待,但返回程序产生的输出。
  • spawn不会等待,而是返回子进程的PID。注意 这需要Windows上的Ruby 1.9才能工作。

在输出过程中还有一个选项检查Open3库可以获得更多信息。