【发布时间】:2015-04-25 12:28:03
【问题描述】:
我正在尝试为 Native Message 客户端编写一个 Ruby 包装器,以便我可以打开一个通常通过命令行与 Chrome 中的网站交互的外部程序。本机消息协议是 JSON 编码(UTF-8 格式)的消息,前面是消息长度的 32 位整数,全部为二进制。然后,Native Message 客户端通过标准输入接收该消息,并通过标准输出返回以相同方式编码的消息。
我尝试做的是:
message = '{"message":"version"}'
input = [message.length, message].pack('LA*')
output = `./myNaClProgram #{input}`
puts output
问题是当我运行它时,我收到以下错误:string contains null byte (ArgumentError)。这大概是因为当消息最初变成uint32时有一些\0。
如何将输入字符串传递给本机消息客户端,而 Ruby 不会抱怨字符串中的空字节?我可以使用不同类型的字符串,或者以不同的方式传递它吗?
【问题讨论】:
-
试试
output = IO.popen(['./myNaClProgram', input]).read -
那不行;它给了我同样的错误:
popen': string contains null byte (ArgumentError):-(