标签: stdout

将函数输出重定向到/ dev/null

我正在使用正在向cout或打印警告消息的库cerr.我不希望此警告消息到达我的程序的输出.如何捕获此输出并将其输入/dev/null或类似?

MWE:

#include <iostream>

void foo()
{
    std::cout << "Boring message. " << std::endl;
};

int main()
{
    foo();
    std::cout << "Interesting message." << std::endl;
    return 0;
}
Run Code Online (Sandbox Code Playgroud)

输出应该是:

Interesting message.
Run Code Online (Sandbox Code Playgroud)

main该如何修改以获得所需的输出?(foo不得更改.)


我尝试使用freopen()fclose(stdout)按照此问题中的建议如何将stdout重定向到Windows应用程序中的某些可见显示?.结果是没有打印任何内容.

c++ stdout

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

了解stdin stdout stderr

我正在努力理解stdin stdoutstderr.

我看到它们一直用在人们的代码中,我无法完全理解它们是什么.我假设他们与输入/输出有关,但一直在网上寻找解释,但找不到.有没有人知道与解释的良好联系,或者它是否足够简单来解释它对我来说是一个很大的帮助.

因为我正在学习Python 3,所以这方面的例子会有所帮助.

stdin stdout stderr

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

"printf"在Windows非控制台应用程序中写入的位置?

如果我选择创建一个Windows非控制台应用程序,并printf\cout在代码中实现,那么printf\cout写在哪里?它写入stdout缓冲区吗?如果是的话,无论如何都要从中读取它stdout并将其打印到某个文本文件中或者MessageBox使用文本进行读取(只是为了验证我是否正确读取了它)?

编辑::只是为了澄清我不想将输出重定向到任何地方.我想知道,printf/cout写在哪里?如果它写入某个默认缓冲区,是否有办法读取输出,只是为了验证我已经从正确的缓冲区读取了正确的输出.请不要给我重定向"stdout"的解决方案.

c c++ winapi stdout visual-c++

19
推荐指数
2
解决办法
7731
查看次数

python 3.0,如何使print()输出unicode?

我正在使用WinXP 5.1.2600,编写一个涉及中文拼音的Python应用程序,这让我遇到了无数的Unicode问题.切换到Python 3.0已经解决了许多问题.但是由于一些奇怪的原因,控制台输出的print()函数不支持Unicode.这是一个很小的计划.

print('sys.stdout encoding is "' + sys.stdout.encoding + '"')
str1 = 'lüel?'
print(str1)
Run Code Online (Sandbox Code Playgroud)

输出为(为了便于阅读,将尖括号更改为方括号):

    sys.stdout encoding is "cp1252"
    Traceback (most recent call last):
      File "TestPrintEncoding.py", line 22, in [module]
        print(str1)
      File "C:\Python30\lib\io.py", line 1491, in write
        b = encoder.encode(s)
      File "C:\Python30\lib\encodings\cp1252.py", line 19, in encode
        return codecs.charmap_encode(input,self.errors,encoding_table)[0]
    UnicodeEncodeError: 'charmap' codec can't encode character '\u0101' 
    in position 4: character maps to [undefined]

请注意,ü=\xfc = 252没有问题,因为它是高位ASCII.但是ā=\u0101超过了8位.

任何人都知道如何将sys.stdout的编码更改为'utf-8'?请记住codecs,如果我理解文档正确,Python 3.0不再使用该模块.


道歉,我给你的程序没有序言.在给出3行之前,它开始如下:

#!/usr/bin/env python
# -*- coding: utf-8 -*-

import sys …
Run Code Online (Sandbox Code Playgroud)

printing unicode console stdout python-3.x

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

如何在Perl中运行外部命令并捕获其输出?

我是Perl的新手,想知道prg在以下场景中运行外部命令(调用它)的方法:

  1. prg,stdout只得到它.
  2. prg,stderr只得到它.
  3. 运行prg,得到了stdoutstderr,分别.

perl stdout stderr

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

stdout行默认是缓冲,无缓冲还是不确定?

7.9.13/7c99规定:

在程序启动时,预定义了三个文本流,无需明确打开 - 标准输入(用于读取传统输入),标准输出(用于写入常规输出)和标准错误(用于写入诊断输出).

最初打开时,标准错误流未完全缓冲; 当且仅当可以确定流不参考交互设备时,标准输入和标准输出流被完全缓冲.

这是有道理的.如果您将标准输出推送到文件,则需要将其完全缓冲以提高效率.

但是,当你无法确定设备是非交互式的(即正常输出到终端)时,我在标准中没有提到输出是线路缓冲还是无缓冲.

我问的原因是我在这里回答我应该fflush(stdout);在两个陈述之间插入一个:

printf ("Enter number> ");
// fflush (stdout); needed ?
if (fgets (buff, sizeof(buff), stdin) == NULL) { ... }
Run Code Online (Sandbox Code Playgroud)

因为我没有printf用换行符终止.任何人都可以清除这个吗?

stdout c99 buffered

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

VBscript代码捕获stdout,而不显示控制台窗口

这是一个VBScript代码示例,演示了如何捕获命令行程序发送到标准输出的任何内容.它执行命令xcopy /?并在消息框中显示输出.在出现消息框之前,您会看到控制台窗口弹出一瞬间.

Set objShell = WScript.CreateObject("WScript.Shell")
Set objExec = objShell.Exec("xcopy /?")
Do
    line = objExec.StdOut.ReadLine()
    s = s & line & vbcrlf
Loop While Not objExec.Stdout.atEndOfStream
WScript.Echo s
Run Code Online (Sandbox Code Playgroud)

这是另一个VBScript代码示例,演示如何在不显示控制台窗口的情况下执行脚本.

objShell.Run "c:\temp\mybatch.bat C:\WINDOWS\system32\cmd.exe", 0
Run Code Online (Sandbox Code Playgroud)

要么

objShell.Run "c:\temp\myscript.vbs C:\WINDOWS\system32\cscript.exe", 0
Run Code Online (Sandbox Code Playgroud)

你可以看到它有形式<script><space><executor>.最后一个示例使用objShell.Run而不是objShell.Exec

我不知道的是如何执行命令行程序(如果需要,从批处理文件),捕获标准输出,而不显示控制台窗口.有任何想法吗?

vbscript stdout batch-file

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

在Bash中连接字符串,文件和程序输出

在我的情况下,用例是CSS文件串联,然后才能最小化.要连接两个CSS文件:

cat 1.css 2.css > out.css
Run Code Online (Sandbox Code Playgroud)

要在一个位置添加一些文本,我可以做到

cat 1.css <<SOMESTUFF 2.css > out.css
This will end in the middle.
SOMESTUFF
Run Code Online (Sandbox Code Playgroud)

要添加STDOUT 一个其他程序:

sed 's/foo/bar/g' 3.css | cat 1.css - 2.css > out.css
Run Code Online (Sandbox Code Playgroud)

到现在为止还挺好.但我经常遇到这样的情况,我需要将几个字符串,文件甚至程序输出混合在一起,比如版权标题,预处理的文件sed(1)等等.我想在尽可能少的步骤和临时文件中将它们连接在一起,同时可以自由选择顺序.

简而言之,我正在寻找一种方法,以尽可能少的步骤在Bash中执行此操作:

command [string|file|output]+ > concatenated
# note the plus ;-) --------^
Run Code Online (Sandbox Code Playgroud)

(基本上,有一个cat处理多个STDIN就足够了,我猜,就像

<(echo "FOO") <(sed ...) <(echo "BAR") cat 1.css -echo1- -sed- 2.css -echo2-
Run Code Online (Sandbox Code Playgroud)

但我没有看到,我如何访问这些.)

bash stdout concatenation

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

ffmpeg:哪种文件格式支持stdin使用?

我知道ffmpeg能够从中读取数据stdin而不是从磁盘中读取数据ffmpeg -i -.是否支持所有文件格式?如果不是,是否有支持哪种文件格式的列表?

stdin ffmpeg stdout file stream

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

将shell脚本中的echo输出重定向到logfile

我有一个包含大量内容的shell脚本echo.我想将输出重定向到日志文件.我知道有命令调用cmd > logfile.txt,或者在文件中执行echo 'xy' > logfile.txt,但是是否可以在脚本中设置文件名然后自动将所有echo写入此文件?

shell stdout

18
推荐指数
4
解决办法
7万
查看次数