标签: stdout

我可以将STDOUT和STDERR发送到日志文件,也可以发送到Win32 Perl中的屏幕吗?

我搜索过互联网并找到了一些很好的解决方案,可以将STDOUT发送到2个不同的地方.喜欢日志文件,同时也喜欢屏幕.这是一个例子:

use IO::Tee;
my $log_filename = "log.txt";
my $log_filehandle;
open( $log_filehandle, '>>', $log_filename )
  or die("Can't open $log_filename for append: $!");
my $tee = IO::Tee->new( $log_filehandle, \*STDOUT );
select $tee;
Run Code Online (Sandbox Code Playgroud)

但是这个解决方案让STDERR只进入屏幕,我希望STDERR既可以进入屏幕,也可以进入STDOUT记录到的同一个日志文件.这甚至可能吗?

我的任务是记录我的构建过程,但我也想像往常一样在IDE的屏幕上看到它.记录错误消息与记录快乐消息一样重要.将错误记录到单独的日志文件中并不是一个好的解决方案.

perl logging redirect stdout stderr

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

记录bash和stdout中的函数

我希望能够将日志消息放在bash函数的中间,而不会影响这些函数的输出.例如,请考虑以下功能log()get_animals():

# print a log a message
log ()
{
    echo "Log message: $1"
}

get_animals()
{
    log "Fetching animals"
    echo "cat dog mouse"
}

values=`get_animals`
echo $values
Run Code Online (Sandbox Code Playgroud)

之后$values包含字符串"Log message: Fetching animals cat dog mouse".

我应该如何修改这个脚本以便"Log message: Fetching animals"输出到终端,并$values包含"cat dog mouse"

bash logging stdout

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

在ST中将STDIN,STDOUT,STDERR重定向到/ dev/null

在Stevens的UNIX网络编程中,他提到重定向stdin,stdout和stderr,这在设置守护进程时是必需的.他用以下C代码完成它

/* redirect stdin, stdout, and stderr to /dev/null */
open("/dev/null", O_RDONLY);
open("/dev/null", O_RDWR);
open("/dev/null", O_RDWR);
Run Code Online (Sandbox Code Playgroud)

我很困惑这三个'知道'他们是如何重定向三个标准*.特别是因为最后两个命令是相同的.有人可以解释或指出我正确的方向吗?

c redirect stdin stdout

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

如何避免在返回值中将数据打印到stdout?

在进行一些Powershell自动化时,我遇到了.cmd自动捕获文件写入stdout的数据的问题.我有两个函数可以执行以下操作:

function a {
    & external.cmd # prints "foo"
    return "bar"
}

function b {
    $val = a
    echo $val # prints "foobar", rather than just "bar"
}
Run Code Online (Sandbox Code Playgroud)

基本上,external.cmd发送到stdout的数据被添加到返回值a,即使我真正想要返回的a是我指定的字符串.我怎么能阻止这个?

powershell stdout return-value

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

使用optparse将stdin和stdout重定向到python中的文件的一致方法

我有十几个可以通过stdin或选项接受输入的程序,我想以类似的方式为输出实现相同的功能.

optparse代码如下所示:

parser.add_option('-f', '--file',
       default='-',
       help='Specifies the input file.  The default is stdin.')
parser.add_option('-o', '--output',
       default='-',
       help='Specifies the output file.  The default is stdout.')
Run Code Online (Sandbox Code Playgroud)

其余适用的代码如下所示:

if opts.filename == '-':
    infile = sys.stdin
else:
    infile = open(opts.filename, "r")

if opts.output == '-':
    outfile = sys.stdout
else:
    outfile = open(opts.output, "w")
Run Code Online (Sandbox Code Playgroud)

这段代码工作正常,我喜欢它的简单性 - 但是我无法找到任何使用默认值' - '表示stdout的人的引用.这是一个很好的一致解决方案还是我忽略了更好或更期望的事情?

python stdin stdout optparse

13
推荐指数
2
解决办法
6389
查看次数

node.js使用单独的stdout和stderr流以交互方式生成子进程

考虑以下C程序(test.c):

#include <stdio.h>

int main() {
  printf("string out 1\n");
  fprintf(stderr, "string err 1\n");
  getchar();
  printf("string out 2\n");
  fprintf(stderr, "string err 2\n");
  fclose(stdout);
}
Run Code Online (Sandbox Code Playgroud)

哪个应该打印一行到stdout,一行到stderr,然后等待用户输入,然后另一行到stdout,另一行到stderr.非常基本!在编译并在命令行上运行时,程序的输出完成(收到getchar()的用户输入):

$ ./test 
string out 1
string err 1

string out 2
string err 2
Run Code Online (Sandbox Code Playgroud)

尝试使用带有以下代码的nodejs将此程序生成为子进程时:

var TEST_EXEC = './test';

var spawn = require('child_process').spawn;
var test = spawn(TEST_EXEC);

test.stdout.on('data', function (data) {
  console.log('stdout: ' + data);
});

test.stderr.on('data', function (data) {
  console.log('stderr: ' + data);
});

// Simulate entering data for getchar() after 1 second
setTimeout(function() { …
Run Code Online (Sandbox Code Playgroud)

stdout spawn unbuffered node.js

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

外壳到节点时保留输出颜色

我有一个小Grunt任务,通过节点弹出并运行"composer install".

var done = this.async();

var exec = require('child_process').exec;
var composer = exec(
    'php bin/composer.phar install',
    function(error, stdout, stderr) {
        done(error===null);
    }
);

composer.stdout.on(
    'data',
    grunt.log.write
);
Run Code Online (Sandbox Code Playgroud)

如您所见,我正在将此子进程的stdout输出到grunt.log.除了输出都是我的默认控制台颜色外,所有输出都显示出良好且与预期一致.如果我直接运行"composer install",我会突出显示提高可读性.

由于我是节点的新手,Grunt和一般的炮轰,我不确定系统的哪个部分着色会丢失,甚至不知道如何有效地调试它.

javascript stdout child-process node.js gruntjs

13
推荐指数
4
解决办法
7233
查看次数

如何在python中沉默statsmodels.fit()

当我想在python中使用某个模型时,我经常使用fit()方法statsmodels.在某些情况下,我编写了一个自动拟合的脚本:

import statsmodels.formula.api as smf
import pandas as pd
df = pd.read_csv('mydata.csv')  # contains column x and y
fitted = smf.poisson('y ~ x', df).fit()
Run Code Online (Sandbox Code Playgroud)

我的问题是如何使fit()方法沉默.在我的环境中,它输出一些有关适合标准输出的信息,如:

Optimization terminated successfully.
         Current function value: 2.397867
         Iterations 11
Run Code Online (Sandbox Code Playgroud)

但我不需要它.我找不到控制标准输出打印的参数.我该如何沉默fit()方法?

Python 3.3.4,IPython 2.0.0,pandas 0.13.1,statsmodels 0.5.0.

python stdout ipython python-3.x statsmodels

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

如何制作一个简单的C++程序,其中没有刷新std :: cout

为了更好地理解C++中的缓冲流,我想编写一个简单的程序,std::cout在终止之前不刷新缓冲区.由于我已经读取了std::cout在正常终止时刷新,我尝试抛出运行时错误.我也避免使用std::endl,据我所知,强制冲洗.第一次尝试:

//file noflush.cpp
#include <iostream>

int main() {
    std::cout << "Don't write me to the console!";
    throw 0;
}
Run Code Online (Sandbox Code Playgroud)

用g ++编译,从终端调用:

$ ./noflush
libc++abi.dylib: terminating with uncaught exception of type int
Don't write me to the console!Abort trap: 6
Run Code Online (Sandbox Code Playgroud)

即使我强制运行时出错,看起来缓冲区在终止时仍然会被刷新.是否有可能在缓冲区中"绑定"某些数据,使其不被写入设备?

c++ buffer cout stdout stream

13
推荐指数
2
解决办法
1506
查看次数

如何立即打印标准输出?

我该如何立即输出stdoutstdout所有输入完成后将打印.

require 'open3'
def run(cmd)
    Open3.popen3(cmd) do |stdin, stdout, stderr, thread|

    Thread.new do
      stdout.each {|l| puts l}
    end

    Thread.new do
      while thread.alive?
        stdin.puts $stdin.gets
      end
    end

    thread.join
  end
end

run ("ruby file_to_test.rb")
Run Code Online (Sandbox Code Playgroud)

file_to_test.rb:

puts "please, enter s"
puts "please, enter q"

s = gets.chomp!
q = gets.chomp!

puts s
puts q
Run Code Online (Sandbox Code Playgroud)

运行main.rb后的结果是:

somestring
somestring2
please, enter s
please, enter q
somestring
somestring2
Run Code Online (Sandbox Code Playgroud)

我该如何立即输出stdout

ruby io stdin stdout

13
推荐指数
2
解决办法
9633
查看次数