草庐IT

thumb_stdout

全部标签

ruby - 连续从子进程中读取 STDOUT 和 STDERR

我正在使用IO.popen来启动一个子进程,但我只得到在子进程运行时(有时是5分钟或其他时间)所发生的一切的结果子进程退出。我真的需要能够在发生时看到子进程写入stderr和stdout的所有内容。到目前为止,我找不到像这样工作的任何东西,但我确信这是可能的。 最佳答案 如果您需要实时获取输出,我建议使用stdlibPTY而不是popen像这样:require'pty'cmd='echoa;sleep1;cat/some/file;sleep1;echob'PTY.spawncmddo|r,w,pid|beginr.syncr.ea

stdout 的 Linux proc/pid/fd 是 11?

使用重定向到文件的标准输出执行脚本。所以/proc/$$/fd/1应该指向那个文件(因为stdoutfileno是1)。但是,该文件的实际fd是11。请解释原因。这是session:$cathello.sh#!/bin/sh-els-l/proc/$$/fd>&2$./hello.sh>/tmp/1total0lrwx------1ngausers64May2822:050->/dev/pts/0lrwx------1ngausers64May2822:051->/dev/pts/0lr-x------1ngausers64May2822:0510->/home/me/hello.sh

c - POSIX 系统上的 `fileno(stdout) != 1` 可能吗?

假设STDOUT_FILENO,stdout文件描述符可以不同于1(stdoutneednotbeamodifiablelvalue)?例如,可以freopen("/dev/null","w",stdout)更改fileno(stdout)结果? 最佳答案 是的。测试程序:#includeintmain(){fclose(stdin);freopen("stdout.txt","w+",stdout);fprintf(stderr,"%d\n",fileno(stdout));return0;}这会在我的机器(OSX10.9.4)上

python - 如果命令行程序不确定 stdout 的编码,它应该输出什么编码?

我有一个用Python编写的命令行程序,当我通过命令行上的另一个程序将其通过管道传输时,sys.stdout.encoding为None。我想这是有道理的——输出可能是另一个程序,或者您将其重定向到的文件,或者其他任何东西,并且它不知道需要什么编码。但我也不会!这个程序将被许多不同的人(幽默的我)以不同的方式使用。我应该谨慎行事并只输出ascii(用问号替换非ascii字符)吗?还是我应该输出UTF-8,因为它现在非常普遍? 最佳答案 我建议您使用当前的语言环境。Python2>importlocalePython2>locale.

linux - 回显到 stdout 和 stderr

我有一个可能非常简单的初学者问题:如何将shell脚本中的echo同时发送到stdout和stderr?我知道我可以回显到stderrecho"foo"1>&2但我需要两者的输出。我尝试了一些谷歌搜索,但没有任何效果。 最佳答案 应该这样做echo"foo"|tee/dev/stderr 关于linux-回显到stdout和stderr,我们在StackOverflow上找到一个类似的问题: https://stackoverflow.com/question

c - 为什么我可以从 STDOUT 读取并获得用户的终端输入?

我很困惑。在OSX和Linux(使用BASH、TCSH、FISH和DASH)下,此代码在直接通过终端提供输入时成功读取用户输入,但在通过管道提供用户输入时则无法读取。但更令人困惑的是:我不希望这段代码能正常工作!此代码正在从STDOUT读取。我希望读取调用返回错误,因为我实际上是从只写管道读取数据。#include#includeintmain(intargc,char**argv){charbuffer[11];size_tnread;if((nread=read(1,buffer,sizeof(buffer)-1))要构建(假设您将示例命名为test.c):$gcc-otestte

linux - 使用命令行在启动后捕获进程的 STDIN/STDERR/STDOUT?

谢谢!我的用户案例:我开始了一个冗长的交互式“配置”过程(比如在“屏幕”下),然后意识到我需要始终回答“否”,直到我看到一个特定的关键字。手动执行此操作似乎是在浪费时间(并不是说我很容易错过关键字..)因此,我似乎想将STDERR/STDOUT(的副本)通过管道传输到过滤器,并且还能够注入(inject)(控制台)进程的STDIN,启动后,使用命令行?有现成的解决方案吗?以下工具似乎有帮助。要捕获输出,请使用strace-ewrite-p$PID它不是那么干净(显示像这样的行:write(#,)),但是有效!但是它说正确处理UTF8吗?要重定向输出,做类似的事情printf'..inp

Linux/珀尔 : Additional output buffers other than STDOUT and STDERR?

出于好奇,是否可以在Perl脚本中创建、实例化或以其他方式访问除STDOUT和STDERR之外的其他输出缓冲区?用例是额外的输出以通过管道传输到文件或其他命令,例如./doublerainbow.pl3>full_on.txt4>all_the_way!.txt 最佳答案 当然。使用>&=模式的open命令允许您打开任意文件描述符上的文件句柄。#perl4fd.pl>file12>file23>file34>file45&=3';openNONSTDBAR,'>&=4';openNONSTDBAZ,';$echopppbbbttt>

linux - 检查 bash 脚本中是否有 stdout 重定向

我需要检查我的程序的输出是否被重定向;如果是,我需要保留并通过邮件发送。例子:$myprogram-param1-param2-param3>/home/polly/log.txtmyprogram.sh:if'redirectionisnotempty';thencat|mailx-s"Thisisatestemail."polly@gmail.comfi 最佳答案 您可以检查stdout是否是终端。当stdout被重定向或通过管道传输时,它将不是终端。您可以使用带有-t选项的测试命令来获取此信息:if[-t1];then#std

c - 为什么不能将 asm 中调用 c 库 printf 的 stdout 传送到其他程序?

我写了一个简单的NASM程序:打印测试.asmsection.datastr_outdb"val=%d",10,0section.textglobalmainexternprintfmain:PUSH5PUSHDWORDstr_outCALLprintfADDESP,8MOVEAX,1INT80h我正在使用以下命令链接并创建一个可执行文件:nasm-felf-lprinttest.lstprinttest.asmgcc-oprinttestprinttest.o当链接和执行时,这会毫无问题地向控制台打印“val=5”。据我所知,默认情况下调用printf会写入stdout。那么,为什么