检索隐藏控制台的命令输出?

时间:2013-06-25 17:46:54

标签: python command-line vbscript dos stdout

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

一切正常,除了每次脚本运行时都会弹出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 ”输出一个标准输出,但仅用于退出过程代码。

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

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

解决方案:

How to avoid console window with .pyw file containing os.system call?

邮政作者的说明: 嗨,这是我第一次来这里,这个问题不是重复,而是变种。对此的证明是我之前进行了搜索,在我实际编写问题之前很难找到解决方案。因此,主持人需要比这更微妙。我认为这是一个相关的,相关的问题或变体,但不是重复的。感谢。

2 个答案:

答案 0 :(得分:0)

尝试使用子进程管道示例来实现此目的。

答案 1 :(得分:0)

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

mother.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;从print中删除()得到2.x版本(使用ActiveState Python 2.5.2测试);使用像dir这样的内在函数,前置“ %comspec%/ c“)