【问题标题】:Redirecting cmd stdout and sdterr back to parent将 cmd stdout 和 stderr 重定向回父级
【发布时间】:2014-01-09 06:38:44
【问题描述】:

如果我使用 start 命令从 cmd 提示符创建一个进程(打开一个新的 cmd),是否可以将 stdout 和 stderr 从该进程重定向回调用 cmd?

【问题讨论】:

  • 如果文件名已知,有没有办法截取一个进程的输出到另一个进程中的文件?
  • 你的问题很糟糕——因为你没有说出过程的真实细节,所以读者不能用他们的经验来帮助你。细节会影响现实世界。
  • 我不同意,这是一个一般性问题,不需要详细信息。但我会在这里给你一个人为的例子来帮助你澄清。假设我有带有 echo hello world 的 test.bat。然后我在同一路径中打开另一个 cmd 并键入 start test.bat。打开一个新的cmd,输出Hello World。我想要原始 cmd 中的输出。
  • 你的解释是做作的。那是个问题。你想要一个真正问题的真正解决方案,但你不会提及真实情况。我不确定您是否在技术问题上为任何人提供过支持,但如果您提供过支持,那么您就会知道为什么会导致 20 个问题情况和解决方案不起作用。
  • 好的 foxidrive 谢谢你的帮助。

标签: windows cmd


【解决方案1】:

如果您希望 STARTed 进程的输出出现在父命令控制台中,则只需使用 START /B 选项。

如果你想处理你的命令的输出,那么你应该改用FOR /F ... in ('someCommand') DO ...

【讨论】:

  • 不,我想在子进程中运行进程并在父进程中输出。原因是因为我正在从 python 的子进程运行该进程,除非它在它自己的终端中,否则它不会正确运行。见这里:Communicating with the stdin via python subprocess
【解决方案2】:

好的。我还没有找到这个问题的直接答案。我不想用我认为不必要的细节来解决我的问题,但鉴于我因缺乏这一点而受到批评,我将在这里扩展一下。

我想在我们的生产线上自动更新固件,所以我有一个 python 应用程序,它从 ftp 获取固件,然后通过 python subprocess 命令使用处理器闪存工具将其上传到板的闪存。除了其中一种工具外,其他所有工具都可以。

当一个工具没有在自己的终端中运行时,它似乎有问题,所以我提供了子进程命令字符串的开始,它允许它在自己的终端中正常运行。但是,出于日志记录的原因,我需要这个其他终端的输出。

一个可能的解决方案是使用 >> 或 wintee 将 stdout 和 stderr 记录到文件中,然后通过我原始应用程序中的线程轮询该文件(可能是一个相当复杂的问题解决方案)。然而,该工具还有一个单独的问题,它不喜欢任何标准重定向,所以这对我不起作用。

【讨论】:

  • 是否可以选择将整个过程写入批处理文件?固件上传者关心它在什么样的 cmd 进程下运行是非常奇怪的,除非它可能是一个非常古老的工具并且需要使用 command.com - 我会进一步检查这一点。 command 在现代 Windows 中仍然可用,即使它将命令传递给 cmd.exe 它确实允许旧工具认为它们在 command.com 下运行
  • 说实话。只是我的 python 应用程序上有一个所有其他工具都使用的输出对话框,如果一个工具在提示符下运行,它看起来有点乱。对于生产人员来说,仍然是比让所有东西都在 cmd 中运行更好的解决方案。我将研究修改源sourceforge.net/projects/dvflashutils
猜你喜欢
  • 2014-07-22
  • 2010-11-28
  • 1970-01-01
  • 2012-08-07
  • 2022-01-18
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-05-23
相关资源
最近更新 更多