作为一名长期的UNIXshell脚本编写者/发布工程师,在我最近的工作中全职进入Windows环境,有些事情我不可避免地会错过。其中一个是我信赖的老“exec2>&1”,它在Bourneshell中在脚本运行期间将stderr和stdout永久地结合在一起,以便日志记录将捕获所有好的和坏的东西。我知道您可以将2>foo.log附加到每个命令行调用的末尾,但我想知道是否有更好的方法。在Windows环境中是否有任何等效项?我们在这里同时使用.BAT文件脚本和Perl脚本(主要用于构建自动化,但也用于其他一些事情),我非常想知道这是否可行。 最佳答案
我正在尝试运行可执行文件并使用subprocess.Popen捕获其输出;但是,我似乎并没有得到所有的输出。importsubprocessassfromsubprocessimportPopenimportosps=Popen(r'C:\Tools\Dvb_pid_3_0.exe',stdin=s.PIPE,stdout=s.PIPE)print'pOpendone..'while:line=ps.stdout.readline()printline手动打开时比原来的exe文件少打印两行。我尝试了另一种方法,结果相同:f=open('myprogram_output.txt','w'
我在WindowsXP上工作,我想知道是否可以从stdout获取输出并将其写入文件。我需要能够写入控制台和文件,但使用tee之类的东西是行不通的。我的老板正在开发一个需要一段时间的应用程序,他正在向控制台写入内容。最后,他想倒带一些行的标准输出,然后将输出写入文件。他认为,每次向屏幕写入内容时都写入文件是过多的I/O。我可能完全错了,但这不是tee命令的工作方式吗?Stdout通过管道传输到tee,然后将输出写入控制台,然后写入指定的文件。这可能吗?我知道stdout是一个文件描述符,所以我认为这应该是可能的,因为您可以倒带其他文件,但stdout是只写的吗?我知道在Unix中,std
f=os.popen("gst-launch-qwhateversrc!...!fdsink")f.read(1024);在GNU/Linux上工作得很好,但导致\x0d\x0a而不是Windows的每个\x0a。如何修复?我也试过gst-launch-q.....!matroskamuxstreamable=true!fdsink>qqq3.mkvinconsole和qqq3.mkv也是乱码。gst-launch-qfilesrc位置=文件!fdsink>file2也转换为CRLF。要做什么?适用于Windows的Gstreamer构建没有tcp{server,client}sink
在Windows中,我想使用CreatePipe和CreateProcess来启动一个进程,并捕获写入到stderr的文本。MSDN上有示例代码:http://msdn.microsoft.com/en-us/library/windows/desktop/ms682499(v=vs.85).aspx我的问题是我想重定向和捕获STDERR,但不理会STDIN和STDOUT。让它们仍然绑定(bind)到子进程的控制台窗口。(如果子进程是控制台进程而不是窗口进程。)如果我按照示例代码,将STARTUPINFO.hStdError设置为我的管道句柄,并将STARTUPINFO.hStdOut
正如标题所说,我正在尝试重定向stdout,以测试我有以下程序:#include#include#include#include#defineBUFFER_SIZE4096intmain(intargc,char*argv[]){intfdStdOutPipe[2];intfdStdOut;printf("ConsolePrint...\n");//Startfflush(stdout);_pipe(fdStdOutPipe,BUFFER_SIZE,O_RAW);fdStdOut=_dup(_fileno(stdout));_dup2(fdStdOutPipe[1],_fileno(s
考虑一下,我正在使用命令C:\>pingwww.google.com1>a.txt2>&1|typea.txt它工作得很好,默认情况下windows发送4个数据包,任务结束,然后显示文件内容。但是当我使用C:\>pingwww.google.com-t1>a.txt2>&1|typea.txt这里的任务还没有完成,因为我使用了-t开关。如何在文件中写入文件内容时显示文件内容。我不想使用GnuWin32CoreUtils中的tee 最佳答案 您不想使用GnuWin32CoreUtils中的tee吗?为什么不试试tee命令的PowerS
我有一个WindowsWin32/GUI应用程序,它有时会向stdout和stderr打印有趣的输出,所以我想做的是捕获该输出在应用程序退出后进入文件以供审查。问题是,我可以成功调用freopen_s()将stdout输出捕获到一个文件中,或者我可以用它来捕获stderr输出到一个文件中,但尝试同时执行这两个操作只会产生一个包含经过处理的数据的截断文件。下面是一个重现问题的简单程序;如果我注释掉两个freopen_s()调用中的任何一个,那么我会在创建的blah.txt文件中得到预期的输出(即两个文本之一行),但我想要以包含两个文本行的blah.txt结束。在Windows下可以吗?我
我尝试记录用Python和C编写的程序的所有输出。但是,从Python打印会导致IOError:[Errno9]Badfiledescriptor请问有人知道问题出在哪里以及如何解决吗?PS:它在WindowsXP、Python2.6和MinGWGCC上#include#include#include"Python.h"intmain(){intfds[2];_pipe(fds,1024,O_BINARY);_dup2(fds[1],1);setvbuf(stdout,NULL,_IONBF,0);/*alternativeversion:*///HANDLEhReadPipe,hWr
我见过许多示例,您可以在这些示例中将单个命令的STDin/out/err重定向到一个文件。所以我能够创建一个myLogger.bat作为包装器,将myScript的调用语句重定向到myLogFile。myLogger示例代码:CALL"%xDir%\%%1">"%lDir%\%lFil%"2>&1我从命令行执行>myLogger.batmyScriptToBeLogged.bat但是我无法重定向Windows批处理文件(.bat)中所有命令的STDin/out/err是否有类似于“exec>$logFile2>&1inshell”的东西可以包含在批处理脚本的开头,它将同一脚本的所有日志