【问题标题】:Capture output text from a new process spawned from a main process on Windows从 Windows 上的主进程生成的新进程中捕获输出文本
【发布时间】:2018-07-23 05:25:27
【问题描述】:

我想捕获从父进程生成的子进程的输出。

例如,当父进程在如下命令窗口中运行时

c:>parent.exe

它在一个单独的窗口中生成一个子进程。

我尝试如下捕获输出(包括 Java 异常),它无法捕获子进程的输出

c:>parent.exe > error.log

在新窗口上生成一个新进程

有什么想法吗?

【问题讨论】:

    标签: c# windows command-line command command-prompt


    【解决方案1】:

    您可以使用 powershell 非常简单地做到这一点。它在每个 Windows 系统上都可用。

    然后您可以使用命令 start-process documentation 启动您的程序 在这里,您可以很容易地将 stdout 和 stderr 重定向到文件。

    如果你想将标准输出重定向到一个变量,你可以像这样运行你的程序。

    1. 打开cmd
    2. 输入powershell
    3. $outFromParent = $(parent.exe)

    或者如果你想重定向到一个文件

    PS c:> parent.exe > theOutFile.txt

    更新

    如果这不起作用,那么您可以尝试以下操作。

    PS c:\>$out = & parant.exe 
    PS c:\>$out
    OR
    PS c:\>Write-Host $out
    

    如果这不起作用,您可以尝试 Start-Process。请参阅示例。 或者看here

    PS C:\> Start-Process -FilePath "parant.exe" -RedirectStandardInput "testin.txt" -RedirectStandardOutput "testout.txt" -RedirectStandardError "testerror.txt"
    

    注意如果您启动需要提升权限的应用程序,那么所有这些方法仅在您使用 andmistrator powershell 时才有效。

    希望这会有所帮助。

    【讨论】:

    • 我试过 $outFromParent = $(parent.exe), write-host $outFromParent,它返回空。但是,我可以看到新窗口上显示的文本和 java 异常,然后窗口消失。是否有可能使新创建的窗口不消失?它也不适用于 PS c:> parent.exe > theOutFile.txt。
    • 我尝试了所有这些,但没有一个可以在新窗口中捕获新进程的输出。
    • @Pingpong 你的进程有标准输出吗?可以贴一下窗口的画面吗?
    • 两个进程都在命令控制台窗口上运行。由于 java 异常,子控制台窗口快速显示并消失。父控制台窗口保持不变。
    • @Pingpong 如果在选项 -NoNewWindow-Wait 上方添加 Start-Process 会发生什么。那么 testout.txt 和 testerror.txt 的内容是什么?
    猜你喜欢
    • 2019-06-10
    • 1970-01-01
    • 2013-06-22
    • 2018-11-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-04-12
    • 2013-02-09
    相关资源
    最近更新 更多