相关疑难解决方法(0)

管道python将stdout流输出记录到grep

不久前我知道这样做的原因,但后来我忘记了,谷歌搜索了 5 分钟还没有找到答案。

我写了一个 python 脚本,它有两个处理程序。一种用于文件,一种用于流。

一切都如我所愿。

现在,我想快速搜索输出中正在打印到终端的内容,但是通过 grep 管道脚本的输出似乎不起作用,因为所有输出仍然会打印到终端。

我正在使用 unix 和 python 2.7

这可能是一个重复的问题,但我找不到答案。

这是我对日志记录模块的设置:

def setup_logger(verbosity):
    #logger = logging.getLogger(regress.app_name)
    logger = logging.getLogger('components')
    logger.setLevel(logging.DEBUG)
    # create file handler which logs even debug messages
    fh = logging.FileHandler(Config.logging_file_name, mode='w')
    fh.setLevel(logging.DEBUG)
    # create console handler with a higher log level
    ch = logging.StreamHandler()
    ch.setLevel({True:logging.DEBUG, False:logging.INFO}[verbosity])
    # create formatter and add it to the handlers
    file_formatter = logging.Formatter('%(asctime)s - %(pathname)s - %(funcName)s - %(name)s - %(levelname)s - %(lineno)s - %(message)s')

    console_formatter = …
Run Code Online (Sandbox Code Playgroud)

python linux stdout pipe

7
推荐指数
1
解决办法
3268
查看次数

获取Symfony命令的输出并将其保存到文件中

我正在使用Symfony 2.0.

我在Symfony中创建了一个命令,我想获取其输出并将其写入文件.

我想要的就是把所有写在标准输出上的东西(在控制台上)放在一个变量中.我指的是在命令中回显的东西,在其他文件中捕获的异常,由命令调用等等.我想在屏幕上和变量中输出(为了在文件中写入变量的内容).我将execute()在命令方法结束时在文件中写入.

像这样的东西:

protected function execute(InputInterface $input, OutputInterface $output)
{
    // some logic and calls to services and functions
    echo 'The operation was successful.';

    $this->writeLogToFile($file, $output???);
}
Run Code Online (Sandbox Code Playgroud)

在我想要的文件中:

[Output from the calls to other services, if any]
The operation was successful.
Run Code Online (Sandbox Code Playgroud)

你能帮我么?

我试过这样的事情:

   $stream  = $output->getStream();
   $content = stream_get_contents($stream, 5);
Run Code Online (Sandbox Code Playgroud)

但命令没有以这种方式完成.:(

php command stream symfony

6
推荐指数
1
解决办法
3758
查看次数

sed错误“命令a期望\后跟文本”

这是我的脚本:

openscad $1 -D generate=1 -o $1.csg 2>&1 >/dev/null |
sed 's/ECHO: \"\[LC\] //' |
sed 's/"$//' |
sed '$a;' >./2d_$1
Run Code Online (Sandbox Code Playgroud)

该输出:

sed: 1: "$a;": command a expects \ followed by text
Run Code Online (Sandbox Code Playgroud)

bash sed openscad

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

将标准错误重定向到C中的字符串

我希望能够将stderr重定向到C字符串,因为我需要在我正在编写的程序中使用该字符串.我想避免写入文件(在硬盘上),然后读取文件以获取字符串.完成这项工作的最佳方法是什么?

c string stderr io-redirection

4
推荐指数
2
解决办法
5793
查看次数

如何在if块的变量中捕获命令错误消息

嗨下面是我的bash shell脚本代码,在这里我想捕获if子句的错误消息,当它表示作业已经在运行或无法将作业启动到变量时,如何在下面的脚本中执行,或者任何以下功能的其他方式

if initctl start $i  ; then
    echo "service $i  started by script"
else
    echo "not able to start service $i"
fi

linux bash shell

3
推荐指数
1
解决办法
6837
查看次数

"Pipe stderr, and not stdout" not working in Zsh

How to pipe stderr, and not stdout? perfecly captures my problem, and the first answer is exactly how I initially tried to solve it:

(echo stdout; echo 1>&2 stderr) 2>&1 >/dev/null | less
Run Code Online (Sandbox Code Playgroud)

(带有 echos 的 subshel​​l 命令是一个最小的占位符,感谢 user1934428 来演示该问题;我的实际问题有一个更有用的命令,但其他人都无法运行。)

但是,它不起作用:它同时显示标准输出标准错误。如果我删除管道,它会按预期工作,只显示 stderr。最终我意识到这可能是一个 shell 东西,并尝试了 bash:它在那里完美地工作。我正在使用 Zsh:Zsh 会导致失败吗?

shell zsh

3
推荐指数
1
解决办法
2383
查看次数

Unix:是否可以在显示所有输出的同时将错误输出复制到文件中?

我见过像这样的东西

command > out.txt

有时附上

2&1
Run Code Online (Sandbox Code Playgroud)

但这些似乎转移了所有输出或所有错误流,而不是显示和复制输出到文件,这是我正在尝试做的.我有什么选择吗?

unix bash

2
推荐指数
1
解决办法
470
查看次数

捕获 stderr,但不捕获 stdout

在我的 bash 脚本中,我读入了一组如下所示的行

arg $PROG arg arg
Run Code Online (Sandbox Code Playgroud)

我希望能够运行该行,将 STDERR 捕获为变量,并防止 STDOUT 或 STDERR 打印到屏幕上。到目前为止,这是我的解决方案,但错误变量始终为空。

$PROG=/c/Program1
{ error=$($(eval $line) 2>&1 1>&$out); } {out}>&1
echo $error
Run Code Online (Sandbox Code Playgroud)

请详细说明解决方法。我是 bash shell 脚本的新手并正在尝试学习。

bash shell

2
推荐指数
1
解决办法
1639
查看次数

将标准错误发送到管道

我正在尝试编写一个简单的脚本,该脚本采用标准输出和标准错误,并将该单词放在STDERR:标准错误每行的开头。为了进行测试,我有一个简单的脚本,它在标准输出和标准错误之间交替输出几行:

#!/usr/bin/perl
print "OUT 1\n";
print STDERR "ERR 1\n";
print "OUT 2\n";
print STDERR "ERR 2\n";
Run Code Online (Sandbox Code Playgroud)

当我运行它时:

lorkenpeist$ ./testscript.pl
OUT 1
ERR 1
OUT 2
ERR 2
Run Code Online (Sandbox Code Playgroud)

这是我stderr.awk要添加的脚本STDERR:

#!/bin/awk -f
{print "STDERR: " $0}
Run Code Online (Sandbox Code Playgroud)

如果我运行./testscript.pl | ./stderr.awk(这显然是错误的,因为我正在输出标准而不是标准错误):

lorkenpeist$ ./testscript.pl | ./stderr.awk
ERR 1
ERR 2
STDERR: OUT 1
STDERR: OUT 2
Run Code Online (Sandbox Code Playgroud)

我看到标准错误是立即输出的,而标准输出由于管道而被延迟。打印语句的原始顺序不会保留。

我还可以将标准错误重定向到标准输出:

lorkenpeist$ ./testscript.pl 2>&1 | ./stderr.awk
STDERR: ERR 1
STDERR: ERR 2
STDERR: OUT 1
STDERR: OUT 2
Run Code Online (Sandbox Code Playgroud)

不仅所有内容都被处理,而stderr.awk不仅仅是标准错误,而且打印语句的顺序也没有被保留。有没有办法只将标准错误发送到 …

unix io-redirection

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

重定向 java 和 javac 输出

我正在尝试编写一个安装 (bash) 脚本,我需要在其中检查用户是否安装了 java 1.8。

最明显的方法是调用

javac -version | grep 1.8
Run Code Online (Sandbox Code Playgroud)

,但由于一些奇怪的原因 javac (和 java) -version 输出不能被重定向 - 不能通过 |、> 或 >> - 在第一种情况下,第二个程序没有得到任何输入,在第二个和第三个中,执行命令后输出文件为空。我试图在三台不同的机器上检查它,结果在每台机器上都是一样的。

那是什么原因呢?有没有其他方法可以检查java版本?

java redirect pipe javac output

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

标签 统计

bash ×4

shell ×3

io-redirection ×2

linux ×2

pipe ×2

unix ×2

c ×1

command ×1

java ×1

javac ×1

openscad ×1

output ×1

php ×1

python ×1

redirect ×1

sed ×1

stderr ×1

stdout ×1

stream ×1

string ×1

symfony ×1

zsh ×1