2011-06-17 49 views
7

可能重复:
Running a process in pythonw with Popen without a console
How do I eliminate Windows consoles from spawned processes in Python (2.7)?执行从Python的子进程,而无需打开Windows命令提示符

我有一个调用一个单独的数字运算程序的Python程序(用C语言编写)多次作为子进程(使用subprocess.check_call)。它在Linux上效果很好,除了一件小事外,它在Windows上也很棒:每次调用子进程时,都会创建一个命令提示符窗口,然后在子进程退出时很快销毁。

这根本不影响计算,但是非常烦人,因为这个窗口在屏幕上和屏幕上不停地闪烁,并且使得在计算机上做其他事情变得很困难,因为新的命令提示符窗口可以窃取键盘焦点。

如何简单地执行子进程(没有GUI),并防止创建命令提示符窗口?

+1

你使用shell =真调用'subprocess.check_call'什么时候?如果是的话,尽量不要使用它,看看行为是否没有改变。 – mouad

+0

请参阅http://stackoverflow.com/questions/1016384/cross-platform-subprocess-with-hidden-window – JacquesB

回答

0

你打电话给subprocess.check_call()?如果您通过shell=True,则不应创建该窗口,因为这将导致SW_HIDE标志被设置为STARTUPINFO.wShowWindow属性。

例子:

subprocess.check_call(["ping", "google.com"], shell=True) 
+0

这也有点痛苦,因为它不只是工作;它现在有一些错误,因为它不喜欢当我给它一个相对路径,如果我给它一个绝对路径它不喜欢,因为它有它的空间... –

+0

我最终刚刚通过手动STARTUPINFO。像魅力一样工作。 –

+6

请不要宣传'shell = True'作为解决方案,因为它恰好隐藏了控制台。看到我的答案[这里](http://stackoverflow.com/a/12964900/95735)。 –

2

当您构建C应用程序时,请将其类型设置为Win32子系统而不是控制台子系统。如果这是一个预先构建的应用程序,则可以使用this tool来更改子系统。

+0

如何在Visual C++ 2010 Express中执行此操作? –

+0

好的,我发现在连接器选项中,但现在它说我需要定义一些名为_WinMain的函数。 –

+0

您需要将'main()'重命名为'WinMain()'。函数签名:http://msdn.microsoft.com/en-us/library/ff381406%28v=vs.85%29.aspx –

相关问题