相关疑难解决方法(0)

从Ruby调用shell命令

如何从Ruby程序内部调用shell命令?然后我如何从这些命令输出回Ruby?

ruby shell interop

1024
推荐指数
18
解决办法
51万
查看次数

Ruby,exec,system和%x()或Backticks之间的区别

以下Ruby方法有什么区别?

exec,system%x()反引号

我知道它们用于通过Ruby以编程方式执行终端命令,但我想知道为什么有三种不同的方法来执行此操作.

ruby exec

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

检测stdin是终端还是管道?

当我python从没有参数的终端执行" "时,它会启动Python交互式shell.

当我cat | python从终端执行" "时,它不会启动交互模式.不知何故,没有得到任何输入,它已检测到它已连接到管道.

我如何在C或C++或Qt中进行类似的检测?

c c++ qt stdin pipe

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

可以通过shell重定向捕获彩色输出吗?

我使用的各种bash命令 - 花哨的差异,构建脚本等,产生大量的颜色输出.

当我将此输出重定向到一个文件,然后catless更高版本的文件时,着色消失-大概B/C重定向剥离出来,告诉终端改变颜色的色码的输出的行为.

有没有办法捕获彩色输出,包括着色?

bash shell terminal redirect colors

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

何时使用在Ruby中启动子进程的每种方法

1. ``Backtick

1. a)%x{}百分比X <Backtick的替代语法

  • 在parse.y中定义,请参阅讨论

2. system()

3. fork()

4. open()

4.A. IO.popen()<表现相同open()

4.B. open("|-")

  • 叉到管道

4.C. IO.popen("-")<表现相同open("|-")

5. Open3.popen3()

  • require 'open3'
  • stdlib Open3

6. PTY.spawn()

  • require 'pty'
  • stdlib PTY

7. Shell.transact()

  • require 'shell'
  • stdlib Shell

什么时候应该放弃一个更复杂的方法的可信赖的背叛?

编辑1. 非常感谢Avdi Grimm的帖子描述了每种方法的示例用法:#1(&gist); #2(&gist); #3.

他们是很好的资源来回答如何,但没有明确的组成来回答每个应该使用为什么,并因此恕我直言这个问题不完整的答案.

ruby performance standards subprocess coding-style

60
推荐指数
3
解决办法
8120
查看次数

为什么在使用grep两次时没有显示输出?

基本上我想知道为什么这不输出任何东西:

tail --follow=name file.txt | grep something | grep something_else 
Run Code Online (Sandbox Code Playgroud)

你可以假设它应该产生输出我已经运行了另一行来确认

cat file.txt | grep something | grep something_else
Run Code Online (Sandbox Code Playgroud)

好像你不能多次输出尾巴的输出!?任何人都知道这笔交易是什么,有没有解决方案?

编辑:要回答到目前为止的问题,该文件肯定有grep应显示的内容.作为证据,如果grep是这样做的:

tail --follow=name file.txt | grep something
Run Code Online (Sandbox Code Playgroud)

输出显示正确,但如果使用它:

tail --follow=name file.txt | grep something | grep something
Run Code Online (Sandbox Code Playgroud)

没有显示输出.

如果有帮助我运行ubuntu 10.04

linux command-line grep file pipe

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

假装在任何命令的bash中都是tty

每当我使用grep,并将其管道到其他程序时,该--color选项不受尊重.我知道我可以使用--color=always,但它也提出了一些其他命令,我想得到该命令的确切输出,如果我在tty中我将得到的输出.

所以我的问题是,是否有可能欺骗命令认为命令是在tty内运行的?

例如,跑步

grep --color word file # Outputs some colors
grep --color word file | cat # Doesn't output any colors
Run Code Online (Sandbox Code Playgroud)

我希望能够写出类似的东西:

IS_TTY=TRUE grep --color word file | cat  # Outputs some colors
Run Code Online (Sandbox Code Playgroud)

这个问题似乎有一个工具,可能会做我想要的:空 - 在伪终端(PTY)下运行进程和应用程序,但从我在文档中读到的,我不确定它可以帮助我的问题

bash tty

21
推荐指数
1
解决办法
1万
查看次数

bash:强制exec'd进程有无缓冲的stdout

我有一个像这样的脚本:

#!/bin/bash
exec /usr/bin/some_binary > /tmp/my.log 2>&1
Run Code Online (Sandbox Code Playgroud)

问题是它将some_binary所有日志记录发送到stdout,并且缓冲使得它只能看到几行的块输出.当一些事情陷入困境时,这很烦人,我需要看看最后一行说的是什么.

有没有办法让stdout在我执行会影响some_binary的exec之前没有缓冲,所以它有更多有用的日志记录?

(包装器脚本只在exec之前设置一些环境变量,因此perl或python中的解决方案也是可行的.)

bash logging exec unbuffered-output

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

保留通过"少"或"更多"传送的文本的颜色

某些命令生成彩色文本以提高可读性.

我正在使用Linux.例如,当我使用rakhg diff 输出为彩色时,为了更好的可读性.

但是,当我通过管道输出 less

hg diff | less
Run Code Online (Sandbox Code Playgroud)

颜色丢失了.

我该如何保留颜色?

谢谢!

linux

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

使用Python强制另一个程序的标准输出无缓冲

python脚本控制Linux上的外部应用程序,通过管道将输入传递到外部应用程序stdin,并通过外部应用程序stdout的管道读取输出.

问题是对管道的写入是按块而不是按行缓冲的,因此在控制脚本通过外部应用程序中的printf接收数据输出之前会发生延迟.

无法更改外部应用程序以添加显式fflush(0)调用.

如何将python标准库的pty模块与子进程模块一起使用来实现这一目标?

python linux stdout pipe

13
推荐指数
3
解决办法
4860
查看次数