如何从Python(2.7)中产生的进程中消除Windows控制台?
可能重复:
在没有控制台的情况下用Popen在pythonw中运行一个进程
我在Windows上使用python 2.7来使用dcraw和PIL自动化批量RAW转换。
问题是我打开一个Windows控制台,每当我运行dcraw(这发生每隔几秒钟)。 如果我使用.py作为脚本来运行脚本,那么它就不那么烦人了,因为它只能打开主窗口,但我更愿意只显示GUI。
我如此参与:
args = [this.dcraw] + shlex.split(DCRAW_OPTS) + [rawfile] proc = subprocess.Popen(args, -1, stdout=subprocess.PIPE) ppm_data, err = proc.communicate() image = Image.open(StringIO.StringIO(ppm_data))
感谢里卡多·雷耶斯
对于这个配方的小修改,在2.7中,似乎你需要从_subprocess
获得STARTF_USESHOWWINDOW
(如果你想要的东西可能不太容易改变,你也可以使用pywin32
),所以对于后人来说:
suinfo = subprocess.STARTUPINFO() suinfo.dwFlags |= _subprocess.STARTF_USESHOWWINDOW proc = subprocess.Popen(args, -1, stdout=subprocess.PIPE, startupinfo=suinfo)
调用Popen时需要设置startupinfo参数。
下面是一个来自ActiveState.com食谱的例子:
import subprocess def launchWithoutConsole(command, args): """Launches 'command' windowless and waits until finished""" startupinfo = subprocess.STARTUPINFO() startupinfo.dwFlags |= subprocess.STARTF_USESHOWWINDOW return subprocess.Popen([command] + args, startupinfo=startupinfo).wait() if __name__ == "__main__": # test with "pythonw.exe" launchWithoutConsole("d:\\bin\\gzip.exe", ["-d", "myfile.gz"])