Ruby 将带有空字符的字符串写入程序的stdin

Ruby 将带有空字符的字符串写入程序的stdin,ruby,google-nativeclient,Ruby,Google Nativeclient,我正试图为本地消息客户端编写一个Ruby包装器,以便打开一个外部程序,该程序通常通过命令行与Chrome中的网站进行交互。本机消息协议是一个JSON编码(UTF-8)的消息,前面是消息长度的32位整数,全部为二进制。然后,本机消息客户端通过stdin接收该消息,并通过stdout返回以相同方式编码的消息 我尝试做的是: message = '{"message":"version"}' input = [message.length, message].pack('LA*') output =

我正试图为本地消息客户端编写一个Ruby包装器,以便打开一个外部程序,该程序通常通过命令行与Chrome中的网站进行交互。本机消息协议是一个JSON编码(UTF-8)的消息,前面是消息长度的32位整数,全部为二进制。然后,本机消息客户端通过stdin接收该消息,并通过stdout返回以相同方式编码的消息

我尝试做的是:

message = '{"message":"version"}'
input = [message.length, message].pack('LA*')
output = `./myNaClProgram #{input}`
puts output
问题是,当我运行此命令时,会出现以下错误:
字符串包含空字节(ArgumentError)
。这可能是因为当消息最初转换为
uint32
时,存在一些
\0


如何将输入字符串传递到本机消息客户端,而不让Ruby抱怨字符串中的空字节?我可以使用不同类型的字符串,或者以不同的方式传递它吗?

这不是ruby特有的问题。nix系统上的参数作为以null结尾的字符串传递(有关详细信息,请参阅
exec(2)
)。这意味着空字符是任何命令的参数都不能包含的字符类型。您需要考虑以不同于通过参数的方式传递包含null的消息。(stdin可能是最简单的选择)。

尝试
output=IO.popen(['./myNaClProgram',input]);它给了我同样的错误:
popen]:字符串包含空字节(ArgumentError)
:-(哦,糟了,我试图将其作为参数添加,而不是通过stdin(这是它在文档中所说的)。谢谢!