0

我从 python 环境运行 DOS 命令,该环境通过标准输出检索其命令输出。

一切工作正常,除了每次脚本运行时都会弹出 Windows 控制台,所以我需要一种隐藏 Windows 控制台的方法。

从示意图上看,这是预期的过程:

"Console1" runs "hidden Console2" and retrieves its output into "Console1"

我阅读了一些关于“ HiddenStart ”或“ chp ”等软件的建议,它们在执行 DOS 命令和批处理脚本时会隐藏控制台。VBScript 中的另一种解决方案也可以使用以下代码实现此结果:

Set oShell = CreateObject ("Wscript.Shell")
Dim strArgs
strArgs = "cmd /c COMMAND GOES HERE"
oShell.Run strArgs, 0, false

但不幸的是,“ HiddenStart ”、“ chp ”和 VBScript 脚本都不允许检索已执行命令的命令输出。“ Chp ” 输出标准输出,但仅用于退出过程代码。

有人可能会说,可以将结果记录到磁盘上的文件中,然后检索文件的内容,但这不是所需的,并且会导致更复杂的过程。

所以,我想知道是否有可能从隐藏的控制台检索命令输出,是吗?

解决方案:

如何避免带有包含 os.system 调用的 .pyw 文件的控制台窗口?

帖子作者的注意事项: 嗨,这是我第一次来这里,这个问题不是重复的而是变体。证明是我之前进行了搜索,在我真正写下问题之前很难找到解决方案。所以,版主需要比这更微妙一些。我认为这是一个链接的、相关的问题或变体,但不是重复的。谢谢。

4

2 回答 2

0

尝试子流程管道示例以了解如何做到这一点。

于 2013-06-25T17:50:08.127 回答
0

以 Windows 为中心的解决方案可以基于此 VBScript中的“端口” :

妈妈.py:

import win32com.client
oWS = win32com.client.Dispatch("WScript.Shell")
print("A", "mother starts child")
oEx = oWS.Exec("cscript ..\\vbs\\child.vbs")
while not oEx.Stdout.AtEndOfStream:
   print(oEx.Stdout.ReadLine())
print("B", "mother done")

输出:

A mother starts child
1 child
2 child
3 child
4 child
5 child
B mother done

(ActiveState Python 3.2.2;从prints 中删除 () 会给出 2.x 版本(使用 ActiveState Python 2.5.2 进行测试);要使用类似的内在函数dir,请在前面加上“%comspec% /c”)

于 2013-06-25T19:22:25.687 回答