如何在ruby中获取wget输出?

时间:2017-10-04 06:47:36

标签: ruby stdout wget

我需要从ruby运行以下代码:

system "wget http://example.org/some/large/archive.zip"

当我运行此命令时,我看到

  

将输出重定向到'wget-log'。

我需要tail -f wget-log来查看进度

如何在运行ruby进程的终端中看到wget输出?

我试过

system "wget -O - http://example.org/some/large/archive.zip > dev/null"

但它没有帮助

也许还有其他选项可以使用ruby下载大型档案并查看进度吗?

2 个答案:

答案 0 :(得分:1)

您可以使用Ruby标准库中的Open3模块。

授予您访问stdout,stderr,退出代码以及在运行其他程序时等待子进程的线程

因此,使用GoogleMaps Gmap; GMap.MarkerClick += GMap_MarkerClick; GMap.InfoWindowClick += GMap_InfoWindowClick; private void GMap_MarkerClick(object sender, GoogleMap.MarkerClickEventArgs e) { Marker marker = e.Marker; marker.ShowInfoWindow(); } private void GMap_InfoWindowClick(object sender, GoogleMap.InfoWindowClickEventArgs e) { } 命令可以执行以下操作:

pwd

答案 1 :(得分:0)

ruby​​提供了一个很好的内置库来制作任何类型的http内容,例如下载文件你可以使用require 'net/http' require 'uri' uri = URI(URI.encode("http://example.org/some/large/archive.zip")) Net::HTTP.start(uri.host,uri.port) do |http| request = Net::HTTP::Get.new uri.path http.request request do |response| open "/tmp/my_large_file.zip", 'w' do |io| response.read_body do |chunk| puts "Writing #{chunk.length} bits ..." # see progress io.write chunk end end end end

wget

使用wget ,您无法在红宝石代码中捕获任何类型的http错误。*

使用CommandInvokationFailure: Failed to build apk. /Library/Java/JavaVirtualMachines/jdk-9.jdk/Contents/Home/bin/java -Xmx2048M -Dcom.android.sdkmanager.toolsdir="/Users/kevingriffiths/Android/sdk/tools" -Dfile.encoding=UTF8 -jar "/Applications/Unity/PlaybackEngines/AndroidPlayer/Tools/sdktools.jar" - stderr[ Exception in thread "main" java.lang.reflect.InvocationTargetException at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method) at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62) at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) at java.base/java.lang.reflect.Method.invoke(Method.java:564) at SDKMain.main(SDKMain.java:130) Caused by: java.lang.NoClassDefFoundError: sun/misc/BASE64Encoder at com.android.sdklib.internal.build.SignedJarBuilder.<init>(SignedJarBuilder.java:177) at com.android.sdklib.build.ApkBuilder.init(ApkBuilder.java:446) at com.android.sdklib.build.ApkBuilder.<init>(ApkBuilder.java:422) at com.android.sdklib.build.ApkBuilder.<init>(ApkBuilder.java:362) at UnityApkBuilder.<init>(UnityApkBuilder.java:214) at UnityApkBuilder.main(UnityApkBuilder.java:34) ... 5 more Caused by: java.lang.ClassNotFoundException: sun.misc.BASE64Encoder at java.base/java.net.URLClassLoader.findClass(URLClassLoader.java:466) at java.base/java.lang.ClassLoader.loadClass(ClassLoader.java:563) at java.base/java.lang.ClassLoader.loadClass(ClassLoader.java:496) ... 11 more ] stdout[ ] exit code: 1 UnityEditor.Android.Command.Run (System.Diagnostics.ProcessStartInfo psi, UnityEditor.Android.WaitingForProcessToExit waitingForProcessToExit, System.String errorMsg) UnityEditor.Android.AndroidSDKTools.RunCommandInternal (System.String javaExe, System.String sdkToolsDir, System.String[] sdkToolCommand, Int32 memoryMB, System.String workingdir, UnityEditor.Android.WaitingForProcessToExit waitingForProcessToExit, System.String errorMsg) UnityEditor.Android.AndroidSDKTools.RunCommandSafe (System.String javaExe, System.String sdkToolsDir, System.String[] sdkToolCommand, Int32 memoryMB, System.String workingdir, UnityEditor.Android.WaitingForProcessToExit waitingForProcessToExit, System.String errorMsg) UnityEditor.BuildPlayerWindow:BuildPlayerAndRun() ,您无法进行身份验证,例如在您的ruby代码中。*

使用Ruby内置库,它非常强大。

您可以使用一些错误的代码