Tag: popen

打印出os.popen()的输出而不在python中进行缓冲

假设我有一个进程打印出一些类似于这个ruby代码的数据。 1.upto(10) { |i| puts i puts “\n” sleep 0.6 } 我想要一个生成此过程的python代码,并从中读取数据以将其打印出来。 import os import sys cmd = “ruby /Users/smcho/Desktop/testit.rb”; pingaling = os.popen(cmd,”r”) while 1: line = pingaling.readline() if not line: break print line, sys.stdout.flush() pingaling.close() 这段代码的问题在于它不会逐个打印数字。 似乎python在最后一点打印出所有缓冲的数据。 有没有办法打印出没有缓冲的衍生过程的输出?

从Ruby运行交互式程序

我试图从ruby运行gnuplot(不使用外部gem)并解析其文本输出。 我尝试过IO.popen , PTY.spawn和Open3.popen3但每当我尝试获取输出时它就会“挂起” – 我想等待更多的输出来。 我觉得它以某种方式完成了使用Thread.new但我找不到正确的方法来实现它。 有谁知道它是如何完成的?

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

在Ruby中,我希望能够: 运行命令行(通过shell) 捕获stdout和stderr(最好是单个流)而不使用>2&1 (这里的某些命令失败) 运行其他环境变量(不修改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’ >>> […]

Ruby管道:如何将两个子进程的输出绑定在一起?

是否有自动方式在Ruby中进行shell管道? 我正在尝试将以下shell代码转换为Ruby: a | b | c… > … 但到目前为止我找到的唯一解决方案是自己进行缓冲管理(简化,未经测试,希望它能得到我的意思): a = IO.popen(‘a’) b = IO.popen(‘b’, ‘w+’) Thread.new(a, b) { |in, out| out.write(in.readpartial(4096)) until in.eof? out.close_write } # deal with b.read… 我想我想要的是告诉popen使用现有流而不是创建新流的方法? 或者,使用IO#merge方法将输出连接到b的输入? 当filter的数量增加时,我当前的方法变得相当笨拙。 我明白知道Kernel#system(‘a | b’) ,但我需要以通用的方式将Rubyfilter与外部程序filter混合在一起。