【问题标题】:Can't seem to be able to grab non-string output from run似乎无法从运行中获取非字符串输出
【发布时间】:2023-01-23 15:10:58
【问题描述】:

我想不出其他方法来运行输出二进制文件的命令行,所以我将不得不使用它。

让我们将二进制文件添加到 git 存储库

mkdir test
cd test
git init .
wget https://upload.wikimedia.org/wikipedia/commons/thumb/8/85/Camelia.svg/320px-Camelia.svg.png
git add 320px-Camelia.svg.png
git commit -am "Added Camelia"

获取输出的提交哈希,我们将在下面将其用作<grabbed hash>

现在,运行这个:

say (run "git", "show", "<grabbed hash>:Camelia.svg.png", :out).out

这将返回 Malformed UTF-8 消息。很公平,它不是二进制的。但是,我试图用try 捕获该异常,但没有办法。我试图将运行与 out 分开,我仍然遇到无法捕获的异常。任何的想法?

【问题讨论】:

  • &lt;grabbed hash&gt;: 是关于什么的?
  • @JJ 我修复了您的说明中的错误(例如,commit add 缺少320px- 前缀),但我怀疑它们太糟糕了,Liz,我出于不同的原因重现了相同的结果。我想 Camelia 和 Audrey 一样不是二进制,但她确定看起来二进制。
  • @JJ 我听从了你的指示。你也可以这样做;只需启动a fresh Raku replit 并使用 shell(通常在右侧)。 nix 将提示安装wget 包;我选择了wget.out。最后raku -e 'say (run "git", "show", "84226c9:320px-Camelia.svg.png", :out).out'没有显示Malformed UTF-8而是IO::Pipe&lt;(Path)&gt;(opened)。这只花了几分钟。请考虑也使用 replit 来确认您得到相同的结果。至少我们会知道这个问题是系统或 Rakudo 版本特定的。
  • @raiph 你是对的。哼。
  • 嗨,JJ。如果你已经确认你在 replit 中得到了相同的结果(这大概是你的意思是“你是对的”)但是在你的系统上得到了不同的东西然后确认它是你的系统和/或 Rakudo 版本中的错误。如果是这样,那么如果您编辑您的问题以包含您的系统和 Rakudo 版本的详细信息,将会有所帮助。相反,如果您只是感到困惑,那么也许可以关闭您的问题?或者,如果我们都感到困惑(包括他的回答中的 jnthn),那么也许可以澄清您的问题?

标签: io raku


【解决方案1】:

:bin 选项传递给 run 以让它执行二进制 I/O。使用curl 的示例:

$ raku -e 'say (run "curl", "--no-progress-meter", "https://raku.org/camelia-logo.png", :out, :bin).out.slurp'
Buf[uint8]:0x<89 50 4E 47 0D 0A 1A 0A 00 00 00 0D 49 48 44 52 00 00 01 05 00 00 00 F3 08 06 00 00 00 8F 2A 03 21 00 00 00 01 73 52 47 42 00 AE CE 1C E9 00 00 00 09 70 48 59 73 00 00 0F 61 00 00 0F 61 01 A8 3F A7 69 00 00 00 07 74 49 4D 45 07 D9 07 11 03 07 3A 28 6B FA 81 00 00 00 1A 74 45 58 74 43 6F 6D 6D 65 6E ...>

【讨论】:

  • 但是,它需要解码最常见的选项,即字符串,对吧?
  • 不确定我是否遵循;如果您使用run而不使用:bin,它只是为您执行decode步骤。由于您的数据是二进制的,因此对其进行解码没有意义?
猜你喜欢
  • 2019-11-16
  • 1970-01-01
  • 1970-01-01
  • 2016-07-07
  • 1970-01-01
  • 2019-06-19
  • 1970-01-01
  • 2021-04-27
  • 1970-01-01
相关资源
最近更新 更多