标签: stdout

在Python中通过sys.stdout编写unicode字符串

假设一个人不能使用print(从而享受自动编码检测的好处).所以这让我们失望了sys.stdout.但是,如果不做任何明智的编码sys.stdout是如此愚蠢.

现在,您可以阅读Python维基页面PrintFails并尝试以下代码:

$ python -c 'import sys, codecs, locale; print str(sys.stdout.encoding); \
  sys.stdout = codecs.getwriter(locale.getpreferredencoding())(sys.stdout);
Run Code Online (Sandbox Code Playgroud)

然而,这也不起作用(至少在Mac上).太明白为什么:

>>> import locale
>>> locale.getpreferredencoding()
'mac-roman'
>>> sys.stdout.encoding
'UTF-8'
Run Code Online (Sandbox Code Playgroud)

(UTF-8是终端理解的).

所以将上面的代码更改为:

$ python -c 'import sys, codecs, locale; print str(sys.stdout.encoding); \
  sys.stdout = codecs.getwriter(sys.stdout.encoding)(sys.stdout);
Run Code Online (Sandbox Code Playgroud)

现在,unicode字符串被正确发送到sys.stdout终端上并在终端上正确打印(sys.stdout连接到终端).

这是编写unicode字符串的正确方法sys.stdout还是我应该做的其他事情?

编辑:有时 - 比如说,当输出到less- 时sys.stdout.encoding将是None.在这种情况下,上面的代码将失败.

python unicode macos terminal stdout

17
推荐指数
5
解决办法
3万
查看次数

bash变量分别捕获stderr和stdout或获取退出值

我需要在bash脚本中捕获命令的输出和错误,并知道命令是否成功.

目前,我正在捕捉这两个:

output=$(mycommand 2>&1)
Run Code Online (Sandbox Code Playgroud)

然后我需要检查mycommand的退出值.如果失败了,我需要对输出做一些事情,如果命令成功,我不需要触摸输出.

由于我正在捕获输出,检查$?因为bash成功地将输出捕获到变量中,所以总是为0.

这是一个非常时间敏感的脚本,所以我们试图避免任何较慢的解决方案,如输出到文件并重新读取它.

如果我可以将stdout捕获到一个变量并将stderr捕获到另一个变量,这将解决我的问题,因为我可以检查错误变量是否为空.

谢谢.

variables bash stdout capture stderr

17
推荐指数
2
解决办法
9379
查看次数

有没有办法在Visual Studio中捕获stderr和stdout?

有没有办法在Visual Studio中捕获stdout和stderr?例如,当我使用时

cout <<"Hello world!"<< endl;
Run Code Online (Sandbox Code Playgroud)

出现黑色窗口并消失.它太快了,我看不到它.IDE中有一个输出部分,但它只允许我从构建中选择显示输出,而不选择stdout.

作弊解决方案可能会打电话

system("pause");
Run Code Online (Sandbox Code Playgroud)

但听起来不对.我在选项中搜索但我找不到一个项目.

任何人有任何想法?谢谢.我刚开始使用VS而且我之前在Linux上.

c++ ide command-line stdout visual-studio-2010

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

在bash脚本中将SSH输出捕获为变量

在编写bash脚本时,我一直在努力解决这个问题.基本上,我想测量远程服务器上程序的时间,所以我使用命令: /usr/bin/time -f %e sh -c "my command > /dev/null 2>&1"执行程序.但是,似乎我无法将命令(SSH)的输出捕获到变量.实际上,结果(时间)一直打印到stdout.

完整的代码是:

respond=$(ssh ${fromNode} /usr/bin/time "-f" "%e" "'sh' '-c' 'virsh migrate --live ${VM} qemu+ssh://${toNode}/system --verbose > /dev/null 2>&1'")
Run Code Online (Sandbox Code Playgroud)

响应的值只是空的,尽管时间打印到标准输出.

ssh bash stdout

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

c#中的stdout vs console.write

我对C#/编程非常陌生,并且作为一个学习练习完成了将文本更改为小写的在线挑战.挑战指出它必须'打印到stdout'但我通过使用完成了挑战Console.Writeline

using System;
using System.Collections.Generic;
using System.IO;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace Lowercase
{
    class Program
    {
        static void Main(string[] args)
        {
            using ( StreamReader reader = new StreamReader("TextFile1.txt")) 
            {
                while (!reader.EndOfStream)
                {
                    string line = reader.ReadLine();
                    Console.WriteLine(line.ToLower());
                }

                Console.ReadLine();
            }
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

是否stdout只是另一个名字输出到控制台(提交可以在许多不同的语言),或者做了在线提交代码只是没有正确地检查输出.我用谷歌搜索了'stdout c#',但没有完全理解结果.

c# stdout

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

从paramiko ssh exec_command连续获取输出

我正在使用paramiko在远程机器上通过ssh执行长时间运行的python脚本.工作就像一个魅力,到目前为止没有问题.

不幸的是,stdout(分别是stderr)只在脚本完成后显示!但是,由于执行时间的原因,我更倾向于在打印时输出每个新行,而不是之后.

remote = paramiko.SSHClient()
remote.set_missing_host_key_policy(paramiko.AutoAddPolicy())
remote.connect("host", username="uname", password="pwd")

# myScript produces continuous output, that I want to capture as it appears    
stdin, stdout, stderr = remote.exec_command("python myScript.py")
stdin.close()
for line in stdout.read().splitlines():
    print(line)
Run Code Online (Sandbox Code Playgroud)

怎么能实现这一目标? 注意:当然可以通过另一个ssh会话将输出传输到文件并"减少"此文件,但这非常难看,我需要一个更清洁,理想的pythonic解决方案:)

python ssh interactive stdout paramiko

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

为什么打印 `std::byte` 没有过载?

以下代码不能在 C++20 中编译

#include <iostream>
#include <cstddef>

int main(){ 
    std::byte b {65};
    std::cout<<"byte: "<<b<<'\n';// Missing overload
}
Run Code Online (Sandbox Code Playgroud)

std::byteC++17什么时候加入的,为什么没有对应的operator<<重载打印呢?我也许可以理解不打印容器的选择,但为什么不std::byte呢?它试图充当原始类型,我们甚至有 的重载std::string,最近的std::string_view也许是最相关的 std::complex并且std::bitset它本身可以被打印。

还有std::hex类似的修饰符,所以默认打印 0-255 应该不是问题。

这只是疏忽吗?怎么样operator>>std::bitset有它,它根本不是微不足道的。

编辑:发现甚至std::bitset可以打印。

c++ stdout string-view c++20 std-byte

17
推荐指数
2
解决办法
1034
查看次数

如何将stdout导入Console.app

之前,我可以从Console.app中的应用程序读取所有stdout/stderr数据.一段时间以来,情况已经不是这样了(尽管NSLog数据仍然存在).我现在在10.8.

从2010年开始有一个类似的问题似乎不再是最新的了.

在SU上,还有一个类似的问题尚未得到解答.

有没有被改变,即stdout不应该再被记录?或者在我的系统中出现了什么问题(从旧的SU问题来看,听起来可能就是这样 - 尽管没有帮助)?

我可以以某种方式改变它吗?

macos stdout

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

将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万
查看次数

将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万
查看次数