标签: stdout

如何重新初始化Perl的STDIN/STDOUT/STDERR?

我有一个Perl脚本,它自己分叉和守护.它由cron运行,所以为了不留下僵尸,我关闭了STDIN,STDOUT和STDERR:

open STDIN, '/dev/null'   or die "Can't read /dev/null: $!";
open STDOUT, '>>/dev/null' or die "Can't write to /dev/null: $!";
open STDERR, '>>/dev/null' or die "Can't write to /dev/null: $!";
if (!fork()) {
  do_some_fork_stuff();
  }
Run Code Online (Sandbox Code Playgroud)

我的问题是:我想在此之后恢复至少STDOUT(恢复其他2会很好).但是我需要使用什么魔术符号来重新打开STDOUT,就像STDOUT一样?

我知道如果我是从tty运行的话我可以使用"/ dev/tty"(但我是从cron运行并依赖于其他地方的stdout).我也读过你可以把STDOUT放在一边的技巧open SAVEOUT,">&STDOUT",但只是制作这个副本的行为并没有解决留下僵尸的原始问题.

我正在寻找是否有一些神奇的东西open STDOUT,"|-"(我知道不是这样)以打开它应该打开的方式打开STDOUT.

perl redirect stdin stdout stderr

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

可以捕获PHP回声输出吗?

所以我有一个功能,如:

public static function UnorderedList($items, $field, $view = false){
    if(count($items) > 0){
        echo '<ul>';
        foreach($items as $item){
            echo '<li>';
            if($view){
                echo '<a href="'.$view.'id='.$item->sys_id.'" title="View Item">'.$item->$field.'</a>';
            }else{
                echo $item->$field;
            }   
            echo '</li>';
        }
        echo '</ul>'; 
    }else{
        echo '<p>No Items...</p>';
    }
}
Run Code Online (Sandbox Code Playgroud)

此函数循环一些项目并呈现无序列表.我想知道的是,如果我愿意,它是否可以捕获回声输出.

我通过执行以下操作来打电话来使用此功能:

Render::UnorderedList(Class::getItems(), Class::getFields(), true); 
Run Code Online (Sandbox Code Playgroud)

这会将无序列表转储到我的页面上.我知道我可以将echo更改为变量并返回变量,但我只是好奇是否有可能捕获echo输出而不修改该函数,只是以某种方式修改对函数的调用?

谢谢!

php stdout echo

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

在bash脚本中测试stdout和stderr重定向

我想在我的bash脚本中测试stdout和stderr的定向,或者更确切地说,如果它们已被重定向.

你有个主意吗?

$*bash的变量不给我这个信息.

bash stdout stderr

16
推荐指数
2
解决办法
4780
查看次数

为什么使用fprintf时打印到stdout不会发生?

我有这个代码:

#include <stdio.h>
#include <unistd.h>
int main()
{
        while(1)
        {
                fprintf(stdout,"hello-out");
                fprintf(stderr,"hello-err");
                sleep(1);
        }
        return 0;
}
Run Code Online (Sandbox Code Playgroud)

输出hello-err hello-err hello-err hello-err hello-err hello-err 间隔为1秒.我想知道为什么hello-out永远不会被打印出来.

c printf stdout stderr

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

将stdout和stderr重定向到同一文件并将其还原

我将我的c程序的stderr和stdout的输出重定向到两个文件,然后恢复原始的stdout和stderr:

int sout = dup(fileno(stdout));
freopen("test.txt","w",stdout);

int serr = dup(fileno(stderr));
freopen("test.txt","a",stderr);

//some output....

dup2(sout,fileno(stdout));
close(sout);

dup2(serr,fileno(stderr));
close(serr);
Run Code Online (Sandbox Code Playgroud)

这就是代码示例.这有效.

但是我想将stdout和stderr重定向到同一个文件(以后再恢复它),以便输出按照与不重定向stderr和stdout时在控制台输出上排序的顺序相同的顺序排序.我怎样才能做到这一点?

c redirect stdout stderr output

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

使用tee从python获取实时打印语句

我有一个python脚本,看起来像这样:

for item in collection:
    print "what up"
    #do complicated stuff that takes a long time.
Run Code Online (Sandbox Code Playgroud)

在bash中,我通过执行以下操作来运行此脚本:

$ python my.py | tee my_file.txt
Run Code Online (Sandbox Code Playgroud)

但是,我在bash中看到的只是一个空行,直到程序结束.然后,所有的打印语句都在一个.

这是发球台的预期操作吗?我可以使用T恤实时查看输出吗?

python stdout tee

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

将stdout重定向到文件nodejs

我创造了:

var access = fs.createWriteStream('/var/log/node/api.access.log', { flags: 'w' });
Run Code Online (Sandbox Code Playgroud)

然后管道:

process.stdout.pipe(access);
Run Code Online (Sandbox Code Playgroud)

然后尝试:

console.log("test");
Run Code Online (Sandbox Code Playgroud)

并且/var/log/node/api.access.log中没有出现任何内容.但是这种方式有效:

process.stdout.pipe(access).write('test');
Run Code Online (Sandbox Code Playgroud)

有人可以解释我做错了什么吗?

logging stdout node.js

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

如何捕获系统的输出()

这个问题的动机是Rmarkdown没有将系统命令的结果输出到html文件.由于某种原因,system()R(或system2())中的输出无法被sink()或捕获capture.output(),因此目前knitr无法记录输出.例如,在R控制台中:

> system('ls')
DESCRIPTION
NAMESPACE
R
README.md
inst
man
Run Code Online (Sandbox Code Playgroud)

但在knitr文档中,您将看不到输出,因为capture.output(system('ls'))character(0),即输出无法捕获.当然,我可以cat(system('ls', intern = TRUE), sep = '\n')按照我在答案中提到的那样做,但这有点尴尬.我想知道它是否是一种system()不使用intern = TRUE和捕获输出的方法cat().


更新:请参阅https://github.com/yihui/knitr/issues/1203,了解我为解决问题而提供的黑客攻击.

r stdout knitr

16
推荐指数
2
解决办法
2216
查看次数

stdout进度条在Pycharm中不起作用

许多程序通过向stdout中引出然后返回到行的开始和再次发送来显示进度条.这样他们就可以实现实时进度条的显示.

不幸的是,在许多情况下,此功能在PyCharm的控制台中不起作用.

这是一个关于如何显示keras列车进度条的示例:

在此输入图像描述

即每个进度条更改进入单独的行.

有可能解决这个问题吗?

console stdout intellij-idea pycharm progress-bar

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

16
推荐指数
2
解决办法
5877
查看次数

标签 统计

stdout ×10

stderr ×4

c ×2

python ×2

redirect ×2

bash ×1

console ×1

echo ×1

intellij-idea ×1

keras ×1

knitr ×1

logging ×1

node.js ×1

output ×1

perl ×1

php ×1

printf ×1

progress-bar ×1

pycharm ×1

r ×1

stdin ×1

tee ×1