Wxpython 在Py2Exe中运行GUI应用时如何隐藏PhantomJS控制台?

Wxpython 在Py2Exe中运行GUI应用时如何隐藏PhantomJS控制台?,wxpython,phantomjs,py2exe,Wxpython,Phantomjs,Py2exe,我用wxPython编写了一个程序,并用py2exe编译了这个软件。当使用使用PhantomJS的软件功能时,首先会打开一个权限框,需要权限,然后在我的GUI上会出现一个黑色控制台框。这当然不专业。对于那些不熟悉PhantomJS的人来说,是Selenium使用的.exe 当我的客户正在使用我的wxPython应用程序时,是否仍有隐藏控制台的方法?也许是py2exe选项中的某些内容 有没有一种不用请求用户许可就可以使用PhantomJS的方法?或者至少将“PhantomJS请求许可”更改为“我的

我用wxPython编写了一个程序,并用py2exe编译了这个软件。当使用使用PhantomJS的软件功能时,首先会打开一个权限框,需要权限,然后在我的GUI上会出现一个黑色控制台框。这当然不专业。对于那些不熟悉PhantomJS的人来说,是Selenium使用的.exe

  • 当我的客户正在使用我的wxPython应用程序时,是否仍有隐藏控制台的方法?也许是py2exe选项中的某些内容

  • 有没有一种不用请求用户许可就可以使用PhantomJS的方法?或者至少将“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)