Wxpython 在Py2Exe中运行GUI应用时如何隐藏PhantomJS控制台?
我用wxPython编写了一个程序,并用py2exe编译了这个软件。当使用使用PhantomJS的软件功能时,首先会打开一个权限框,需要权限,然后在我的GUI上会出现一个黑色控制台框。这当然不专业。对于那些不熟悉PhantomJS的人来说,是Selenium使用的.exeWxpython 在Py2Exe中运行GUI应用时如何隐藏PhantomJS控制台?,wxpython,phantomjs,py2exe,Wxpython,Phantomjs,Py2exe,我用wxPython编写了一个程序,并用py2exe编译了这个软件。当使用使用PhantomJS的软件功能时,首先会打开一个权限框,需要权限,然后在我的GUI上会出现一个黑色控制台框。这当然不专业。对于那些不熟悉PhantomJS的人来说,是Selenium使用的.exe 当我的客户正在使用我的wxPython应用程序时,是否仍有隐藏控制台的方法?也许是py2exe选项中的某些内容 有没有一种不用请求用户许可就可以使用PhantomJS的方法?或者至少将“PhantomJS请求许可”更改为“我的
谢谢 我甚至不知道PhantomJS是什么,但如果它是一个可执行文件,这可能会有所帮助 我使用subprocess.Popen并设置shell和creationflags选项,从wxPython应用程序通过管道传输到ffmpeg。然后我看不到ffmpeg的控制台
import subprocess
from win32process import CREATE_NO_WINDOW
p = subprocess.Popen(
cmdstring,
stdin=subprocess.PIPE,
bufsize=-1,
shell=False,
creationflags = CREATE_NO_WINDOW
)
(编辑)
就像你写的,这里有两个问题。一个是关于UAC的,它可能很难像这里解释的那样完全传播。但因为您无论如何都要使用py2exe进行打包,所以可以尝试此py2exe打包选项:
这一行转到py2exe的setup.py文件以打包应用程序
使用这种方法,用户在启动wxpython应用程序时只需向UAC请求一次权限。UAC会说您的应用程序正在请求许可(而不是PhantomJS)
另一个是控制台窗口,如前所述,它可以被CREATE_NO_窗口抑制。为了更完整,我添加了一个从
要从wxpython应用程序执行此命令,可以编写wx.Frame方法,例如:
def OnButton(self, event):
cmdstring = ('phantomjs.exe', 'loadspeed.js', 'http://www.google.com')
p = subprocess.Popen(
cmdstring,
stdout=subprocess.PIPE,
shell=False,
creationflags = CREATE_NO_WINDOW
)
print p.stdout.read() # to get the output from phantomjs.exe
phantomjs.exe和loadspeed.js需要位于系统路径或同一文件夹中。
我在我的电脑上做了一个测试,它把这个打印出来作为输出
Loading time 719 msec
今天我花了很多时间来解决这个问题,终于找到了解决办法 正如otterb提到的,魔鬼在Phantomjs驱动程序service.py的第70行 但是,我不知道“win32process”模块是什么,也不知道如何在Python中安装它<代码>从Win32 Process import创建\u NO\u窗口因此,我无法将creationflags设置为“创建\u NO\u窗口” 多亏了Alex Martelli,他在这里提供了另一种选择: 因此,修改后的代码应为:
self.process = subprocess.Popen(self.service_args, stdin=subprocess.PIPE,
close_fds=platform.system() != 'Windows',
stdout=self._log, stderr=self._log, creationflags=0x08000000)
希望这能帮助遇到同样问题的人。谢谢,但是我到底在哪里写这段代码呢?在py2exe中?不在py2exe中。如果您可以通过管道与PhantomJS exe通信,那么您可以像上面那样重写wxpython应用程序中使用PhantomJS的部分。cmdstring将是PhantomJS的路径,以及在元组中传递给它的所有选项。uac_信息似乎起了作用。对于第二部分,下面是我如何在代码中使用phantomjs:
来自selenium import webdriver
driver=webdriver.phantomjs(“phantomjs.exe”,所需的功能=dcap)
现在我终于看到问题了!听起来您需要深入了解selenium python绑定的源代码。可能修改60处的行,从源代码的self.process=subprocess.Popen
开始,非常感谢。我现在就去。我还想提到,当我在PyScripter中运行时,控制台不会出现,但当我使用py2exe编译并运行exe时,控制台会出现。win32的安装有点棘手。但是,如果只需要创建一个“无”窗口,您可以像CREATE\u NO\u WINDOW=134217728
那样对其进行硬编码。这同样有效。
Loading time 719 msec
self.process = subprocess.Popen(self.service_args, stdin=subprocess.PIPE,
close_fds=platform.system() != 'Windows',
stdout=self._log, stderr=self._log, creationflags=0x08000000)