作为一名长期的UNIXshell脚本编写者/发布工程师,在我最近的工作中全职进入Windows环境,有些事情我不可避免地会错过。其中一个是我信赖的老“exec2>&1”,它在Bourneshell中在脚本运行期间将stderr和stdout永久地结合在一起,以便日志记录将捕获所有好的和坏的东西。我知道您可以将2>foo.log附加到每个命令行调用的末尾,但我想知道是否有更好的方法。在Windows环境中是否有任何等效项?我们在这里同时使用.BAT文件脚本和Perl脚本(主要用于构建自动化,但也用于其他一些事情),我非常想知道这是否可行。 最佳答案
在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
我的Git版本是1.8.0,对于这个版本,Git在Jenkins的安装路径是C:\Git\cmd\git.exe(旧版本是C:\Git\cmd\git.cmd).这解决了我遇到的问题:删除工作区时出错。在Jenkins中,Git存储库URL使用ssh协议(protocol):git@github.com:xxxxx/xxx.git,对我来说,这个URL有效。如果找不到你的key,这个URL会返回一个错误,你需要定义%HOME%,那么你的key应该在%HOME%.ssh中。然后我开始build。当我构建它时,我得到了:stdout:Cloninginto'C:\Jenkins\works
我有一个WindowsWin32/GUI应用程序,它有时会向stdout和stderr打印有趣的输出,所以我想做的是捕获该输出在应用程序退出后进入文件以供审查。问题是,我可以成功调用freopen_s()将stdout输出捕获到一个文件中,或者我可以用它来捕获stderr输出到一个文件中,但尝试同时执行这两个操作只会产生一个包含经过处理的数据的截断文件。下面是一个重现问题的简单程序;如果我注释掉两个freopen_s()调用中的任何一个,那么我会在创建的blah.txt文件中得到预期的输出(即两个文本之一行),但我想要以包含两个文本行的blah.txt结束。在Windows下可以吗?我
我见过许多示例,您可以在这些示例中将单个命令的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”的东西可以包含在批处理脚本的开头,它将同一脚本的所有日志
我编写了一个程序a.exe,它启动了我编写的另一个程序b.exe,使用CreateProcess功能。调用者创建两个管道并将两个管道的写入端传递给CreateProcess作为stdout/stderr句柄以用于子进程。这实际上与CreatingaChildProcesswithRedirectedInputandOutput相同MSDN上的示例确实如此。因为它似乎无法使用等待进程退出的同步调用或stdout或stderr上的数据可用(WaitForMultipleObjects函数不在管道上工作),调用者有两个线程正在运行,它们都执行(阻塞)ReadFile调用stdout/stde
2>&1将获取stderr并将其输出到stdout。2>filename.txt将获取stderr并将其转储到filename.txt如何将它们一起删除?就像某种/dev/null等价物?谢谢! 最佳答案 在Windows上,您可以通过nul设备完成此操作。2>nul 关于windows-从Windows命令中删除stderr,我们在StackOverflow上找到一个类似的问题: https://stackoverflow.com/questions/159
我有一些在Windows上用C#编写的程序,我注意到它们都会将未处理的异常打印到STDERR。我找不到任何关于此的文档,具体是什么将异常写入STDERR?是否有启用/禁用此选项或以其他方式控制它如何打印异常文本的选项?我很好奇.NET或C#应用程序将未处理的异常打印到STDERR的可靠性如何,也许开发人员可以使用编译器或其他选项来完全禁用该功能(类似于Application.SetUnhandledExceptionMode),或者如果程序可能会由于未处理的异常而崩溃,因为它不会打印到STDERR。 最佳答案 当KenThompso
我正在尝试通过Windows中的匿名管道从子进程接收数据。我知道如何使用标准I/O流来执行此操作,但这些被用于其他目的。我也知道如何在Linux或OSX中使用fork()、pipe()和execv()执行此操作。在Windows中,您可以使用CreatePipe()创建管道,并使用SetHandleInformation()使一端不可继承。然后,对于stdout和stderr,您可以将STARTUPINFO和hStdOutput或hStdError设置为CreateProcess()以传递另一端给child。在调用CreateProcess()之后,父级最接近它的是子级管道末端的句柄。
我现在正在Python3.7.2上为ffmpeg编写自己的包装,并且想使用它的“-progress”选项来读取当前进度,因为它具有高度的机器可读性。问题是ffmpeg的“-progress”选项仅接受作为其参数文件名和url。但是我不想创建额外的文件而不是为此目的设置整个网络服务器。我在谷歌上搜索了很多,但所有“ffmpeg的进度条”项目都只依赖于ffmpeg的通用stderr输出。Stackoverflow和Superuser上的其他答案仅对“-vquiet-stats”感到满意,因为“progress”对于谷歌来说并不是很方便的参数名称,确切地说是这种情况。最好的解决方案是强制ff