Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/windows/17.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 如何在不生成新控制台窗口的情况下执行控制台EXE?_Python_Windows_Powershell_Console_Py2exe - Fatal编程技术网

Python 如何在不生成新控制台窗口的情况下执行控制台EXE?

Python 如何在不生成新控制台窗口的情况下执行控制台EXE?,python,windows,powershell,console,py2exe,Python,Windows,Powershell,Console,Py2exe,我有一个Python脚本,它通常是从Windows PowerShell调用的,带有一些命令行参数。我希望以.exe格式分发此脚本,并希望基于控制台保留相同的“用户界面”以供使用 用户打开Windows Powershell 用户从shell调用myscript.exe程序: myscript.exe argument1 argument2 argument3 程序在同一控制台中执行,并在同一控制台中写入其输出 实际上,我有一个myscript.exe程序,它当然从PowerShell获取参

我有一个Python脚本,它通常是从Windows PowerShell调用的,带有一些命令行参数。我希望以.exe格式分发此脚本,并希望基于控制台保留相同的“用户界面”以供使用

  • 用户打开Windows Powershell
  • 用户从shell调用myscript.exe程序:

    myscript.exe argument1 argument2 argument3
    
  • 程序在同一控制台中执行,并在同一控制台中写入其输出

  • 实际上,我有一个myscript.exe程序,它当然从PowerShell获取参数,但不幸的是,它在调用时生成的另一个控制台中执行该程序

    我如何避免这种行为并将所有内容保持在同一个控制台中

    编辑: 我已经按照教程上的

    对于我的setup.py构建文件,我使用了:

    • 控制台
      关键字(提供myscript.py作为列表中的唯一元素)
    • zipfile
      关键字(设置为True)
    • 带有
      优化:2
      捆绑文件:1
      压缩:True的
      选项
      关键字
    编译工作正常,程序执行它应该执行的操作。唯一不受欢迎的事情是打开专用控制台,而不是在同一控制台中执行

    EDIT2:这正是我的setup.py代码

    from distutils.core import setup
    import py2exe, sys, os
    
    sys.argv.append('py2exe')
    
    setup(
        options = {'py2exe': {'bundle_files': 1, 'compressed': True, 'optimize': 2}},
        console = [{'script': "myscript.py"}],
        zipfile = None,
    )
    
    我只是将脚本类型称为:

    python setup.py 
    
    在Windows Powershell中

    EDIT3: 这是在Windows 8.1上通过以下方式完成的:

    • Python 3.4.2
    • py2exe 0.9.2.2
    • Powershell 4.0

    最终的可执行文件也在Windows10系统上进行了测试,没有任何Python安装;它工作了,但显示了相同的控制台生成行为。

    希望下面的内容可能会有所帮助。在标准的
    Windows命令提示符下,以及在使用
    Windows PowerShell时,这对我来说都很好:

    test.py

    import sys
    
    print "Arguments passed:"
    
    for arg in sys.argv:
        print '  {}'.format(arg)
    
    setup.py

    from distutils.core import setup
    import py2exe
    
    setup(
        zipfile = None,
        options = {"py2exe": {"bundle_files": 1}},
        console = [r'test.py'])
    
    它是通过以下方式创建的:

    python setup.py py2exe
    
    下面是一个执行示例:

    PS E:\test> .\test.exe hello world
    Arguments passed:
      E:\test\test.exe
      hello
      world
    
    如果这仍然生成一个单独的shell,是否存在任何可能会改变结果的PowerShell设置环境变量


    我已经在Python 2.7.9 | Anaconda 2.2.0(32位)
    py2exe 0.6.9
    中对此进行了测试,似乎我已经在的帮助下找到了答案,通过链接。这个问题也与这个问题有关。一个共同原因产生了两个不同但相关的问题

    它是由.exe文件名引起的。切换到不同的文件名,停止UAC请求管理员权限,并在同一个shell中执行软件

    名字是:

    <project_name_under_NDA>_update.exe
    

    它起作用了。

    hm,通常,python只打印到标准输出,这意味着不应该打开第二个控制台窗口。再说一次,我不是真正的windows用户…@MarcusMüller我正要说同样的话。可能是
    py2exe
    以某种方式编译可执行文件,使其始终生成一个新的控制台主机是的,我想这是py2exe的一个特性。但是我想知道如何避免它。然后你需要告诉我们你是如何构建可执行文件的。你遵守了吗?我已经用你要求的细节编辑了最初的问题。我已经添加了代码。。。这似乎和你使用的代码差不多。你能在不同的电脑上测试你的EXE吗?是的,当然。它在另一台PC上运行,在Windows 10上,没有任何Python安装。这样,您就不必重命名文件。如果这对您有效(在Windows 10中对我有效),请将其作为更改文件名的更明确替代方法包含在您的答案中。
    try.exe