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

How to execute console EXEs without spawning a new console window?

我有一个 Python 脚本,通常从 Windows PowerShell 调用,带有一些命令行参数。我想以 .exe 格式分发此脚本,并且我希望根据控制台保持相同的 "user interface" 以供使用。

  1. 用户打开Windows电源shell。
  2. 用户从shell调用myscript.exe程序:

    myscript.exe argument1 argument2 argument3
    
  3. 程序在相同的控制台中执行,并将其输出写入相同的控制台

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

如何避免这种行为并将所有内容都放在同一个控制台中?

编辑: 我已按照 http://www.py2exe.org/index.cgi/Tutorial 上的教程进行操作。

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

编译正常,程序做了它应该做的事。唯一不受欢迎的是打开一个专用的控制台,而不是在同一个控制台中执行。

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功率shell

编辑 3: 这是在 Windows 8.1 上完成的:

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

希望以下内容对您有所帮助。这对我来说在标准 Windows Command Prompt 和使用 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-bit)py2exe 0.6.9 中测试过了。

看来我已经借助this answer, linked by . The issue was also connected to this 问题自己找到了答案。一个共同的原因产生了两个不同但相关的问题。

是.exe文件名引起的。切换到不同的文件名,停止 UAC 请求管理员权限并在相同的 shell.

中执行软件

名字是:

<project_name_under_NDA>_update.exe

但切换到

try.exe

成功了。