上一个问题的答案之一提到我可以使用 curl 获取 url;这可以在Thread.new
或 中完成Process.spawn
。但似乎在任何一种情况下,在 Windows 上,当 curl 连接到网络时,都会出现一个小的命令提示符窗口。
我正在像这样调用 curl:
`curl "#{url}"`
有什么办法可以隐藏窗口使其不出现?它不仅会从游戏中夺走注意力(冻结它),而且如果我经常打电话,最终用户会非常烦人。
上一个问题的答案之一提到我可以使用 curl 获取 url;这可以在Thread.new
或 中完成Process.spawn
。但似乎在任何一种情况下,在 Windows 上,当 curl 连接到网络时,都会出现一个小的命令提示符窗口。
我正在像这样调用 curl:
`curl "#{url}"`
有什么办法可以隐藏窗口使其不出现?它不仅会从游戏中夺走注意力(冻结它),而且如果我经常打电话,最终用户会非常烦人。
经过一些实验,我让它工作了,双击脚本时没有窗口,我使用 ruby 的 WMI,你只需要改变 curl 的路径。重要提示:使用扩展名 .rbw 保存它,并确保 rubyw.exe 与该扩展名相关联。
#hidden_curl.rbw
require 'win32ole'
HIDDEN_WINDOW = 0
cmd = '"C:\\Program Files\\curl\\curl.exe" --output c:\\test2.txt "http://stackoverflow.com/questions/10869789/hiding-curl-window-on-windows"'
objStartup = WIN32OLE.connect("winmgmts:\\\\.\\root\\cimv2:Win32_ProcessStartup")
objConfig = objStartup.SpawnInstance_
objConfig.ShowWindow = HIDDEN_WINDOW
objProcess = WIN32OLE.connect("winmgmts:root\\cimv2:Win32_Process")
errReturn = objProcess.Create(cmd, nil, objConfig, nil)
希望这适用于您的系统。
我认为您的问题是您在子shell中运行命令,而windows中的子shell是附加到窗口的CMD。
我没有红宝石来测试以下内容,但您可以尝试:
IO#popen 将指定的命令字符串作为子进程运行; 子进程的标准输入和输出将连接到返回的 IO 对象。
=> http://ruby-doc.org/core-1.8.6/IO.html如果您可以使用 IO
您也可以尝试运行
start /B curl -s "#{url}"
而不是卷曲,请参阅http://www.computerhope.com/starthlp.htm了解启动规范。
此解决方案不会在我的 W7 系统上弹出窗口
cmd = '"C:\Program Files\curl\curl.exe" --silent --output c:\test.txt "http://stackoverflow.com/questions/10869789/hiding-curl-window-on-windows"'
IO.popen(cmd)
或不创建文件
cmd = '"C:\Program Files\curl\curl.exe" --silent "http://stackoverflow.com/questions/10869789/hiding-curl-window-on-windows"'
IO.popen(cmd, "w+") { |io| puts io.readlines }
您可以尝试将 -s 选项传递给 curl 以使其以静默模式运行。就像是
`curl -s "#{url}"`
我猜这不会显示控制台。