相关疑难解决方法(0)

在Ruby中连续读取外部进程的STDOUT

我想通过ruby脚本从命令行运行blender,然后逐行处理blender给出的输出以更新GUI中的进度条.混合器是我需要读取的stdout的外部进程并不重要.

当blender进程仍在运行时,我似乎无法捕获blender正常打印到shell的进度消息,并且我尝试了几种方法.搅拌机退出后,我似乎总是访问搅拌机的标准配置,而不是在它仍在运行时.

这是尝试失败的一个例子.它确实得到并打印了搅拌机输出的前25行,但只有在搅拌机过程退出后:

blender = nil
t = Thread.new do
  blender = open "| blender -b mball.blend -o //renders/ -F JPEG -x 1 -f 1"
end
puts "Blender is doing its job now..."
25.times { puts blender.gets}
Run Code Online (Sandbox Code Playgroud)

编辑:

为了使它更清晰一点,调用blender的命令会在shell中返回一个输出流,指示进度(第1-16部分已完成等).似乎任何"获取"输出的调用都会被阻止,直到混合器退出为止.问题是如何在blender仍在运行时访问此输出,因为blender将其输出打印到shell.

ruby shell stdin stdout process

84
推荐指数
3
解决办法
3万
查看次数

Ruby有Expect等效的宝石吗?

Ruby有Expect等效的宝石吗?

我尝试在code.google和rubygems.org上搜索,但遗憾的是它没有显示出来.

仅供参考:Expect是一个Unix自动化和测试工具,由Don Libes编写,作为Tcl脚本语言的扩展,用于交互式应用程序,如telnet,f​​tp,passwd,fsck,rlogin,tip,ssh等.

ruby expect

20
推荐指数
2
解决办法
2万
查看次数

从 pty 读取

我想在 Linux 上使用(Unix 98 风格的)伪 tty接收(以及以后的处理)write(1)wall(1)消息。我已经有了以下最小实现:

#include <stdlib.h>
#include <string.h>
#include <stdio.h>
#include <unistd.h>
#include <errno.h>
#include <fcntl.h>
#include <signal.h>
#include <utempter.h>

#define BUF_LENGTH 1024

int
main (void)
{
    FILE *lf;
    int masterfd, slavefd;
    char *slave_name = NULL;
    char buf[BUF_LENGTH];
    size_t nbytes = sizeof(buf);
    ssize_t bytes_read;
    int exit_code = EXIT_SUCESS;

    if ((masterfd = posix_openpt (O_RDWR | O_NOCTTY)) == -1 
            || grantpt (masterfd) == -1
            || unlockpt (masterfd) == -1
            || (slave_name = ptsname (masterfd)) == NULL) …
Run Code Online (Sandbox Code Playgroud)

c pty

5
推荐指数
1
解决办法
2121
查看次数

标签 统计

ruby ×2

c ×1

expect ×1

process ×1

pty ×1

shell ×1

stdin ×1

stdout ×1