ruby – 使用自定义环境运行命令行

前端之家收集整理的这篇文章主要介绍了ruby – 使用自定义环境运行命令行前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
Ruby中,我希望能够: @H_404_2@>运行命令行(通过shell)
>捕获stdout和stderr(最好是单流),而不使用> 2& 1(在这里某些命令失败)
>运行附加环境变量(不修改ruby程序本身的环境)

@H_404_2@我知道Open3允许我做1和2.

cmd = 'a_prog --arg ... --arg2 ...'
              Open3.popen3("#{cmd}") { |i,o,e|
                output = o.read()
                error = e.read()
                # FIXME: don't want to *separate out* stderr like this
                repr = "$#{cmd}\n#{output}"
              }
@H_404_2@我也了解到,popen允许您在指定命令行时传递环境,但不允许传递.

@H_404_2@如何编写所有三个代码

@H_404_2@…

@H_404_2@换句话说,Ruby的以下Python代码是什么呢?

>>> import os,subprocess
>>> env = os.environ.copy()
>>> env['MYVAR'] = 'a_value'
>>> subprocess.check_output('ls -l /notexist',env=env,stderr=subprocess.STDOUT,shell=True)

解决方法

Open.popen3可选地接受一个哈希作为第一个参数(在这种情况下你的命令将是第二个参数:
cmd = 'a_prog --arg ... --arg2 ...'
Open3.popen3({"MYVAR" => "a_value"},"#{cmd}") { |i,e|
  output = o.read()
  error = e.read()
  # FIXME: don't want to *separate out* stderr like this
  repr = "$#{cmd}\n#{output}"
}
@H_404_2@Open使用Process.spawn来启动命令,所以你可以看看documentation for Process.spawn看到它的所有选项.

猜你在找的Ruby相关文章