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