gpt4 book ai didi

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

转载 作者:数据小太阳 更新时间:2023-10-29 06:38:02 24 4
gpt4 key购买 nike

在 Ruby 中,我希望能够:

  1. 运行命令行(通过 shell)
  2. 在不使用 >2&1 的情况下同时捕获 stdout 和 stderr(最好是单个流)(此处的某些命令会失败)
  3. 使用额外的环境变量运行(不修改 ruby​​ 程序本身的环境)

我了解到 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}"
}

我还了解到 popen允许您在指定命令行时传递环境但不能

如何编写同时执行这三项的代码?

...

换句话说,以下 Python 代码的 Ruby 等价物是什么?

>>> 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,o,e|
output = o.read()
error = e.read()
# FIXME: don't want to *separate out* stderr like this
repr = "$ #{cmd}\n#{output}"
}

Open 使用Process.spawn 启动命令,因此您可以查看documentation for Process.spawn查看它的所有选项。

关于ruby - 使用自定义环境运行命令行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5917821/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com