如何在不生成新控制台 window 的情况下执行控制台 EXE?
How to execute console EXEs without spawning a new console window?
我有一个 Python 脚本,通常从 Windows PowerShell 调用,带有一些命令行参数。我想以 .exe 格式分发此脚本,并且我希望根据控制台保持相同的 "user interface" 以供使用。
- 用户打开Windows电源shell。
用户从shell调用myscript.exe程序:
myscript.exe argument1 argument2 argument3
程序在相同的控制台中执行,并将其输出写入相同的控制台。
实际上我有一个 myscript.exe 程序,它当然从 PowerShell 获取参数,但不幸的是,它在调用时生成的另一个控制台中执行该程序。
如何避免这种行为并将所有内容都放在同一个控制台中?
编辑:
我已按照 http://www.py2exe.org/index.cgi/Tutorial 上的教程进行操作。
对于我的 setup.py 构建文件,我使用了:
console
关键字(提供 myscript.py 作为列表中的唯一元素)
zipfile
关键字(设置为 True)
options
关键字与 optimize: 2
、bundle_files: 1
和 compressed: 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功率shell
编辑 3:
这是在 Windows 8.1 上完成的:
- Python 3.4.2
- py2exe 0.9.2.2
- 功率shell 4.0
最终的可执行文件也在 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
成功了。
我有一个 Python 脚本,通常从 Windows PowerShell 调用,带有一些命令行参数。我想以 .exe 格式分发此脚本,并且我希望根据控制台保持相同的 "user interface" 以供使用。
- 用户打开Windows电源shell。
用户从shell调用myscript.exe程序:
myscript.exe argument1 argument2 argument3
程序在相同的控制台中执行,并将其输出写入相同的控制台。
实际上我有一个 myscript.exe 程序,它当然从 PowerShell 获取参数,但不幸的是,它在调用时生成的另一个控制台中执行该程序。
如何避免这种行为并将所有内容都放在同一个控制台中?
编辑: 我已按照 http://www.py2exe.org/index.cgi/Tutorial 上的教程进行操作。
对于我的 setup.py 构建文件,我使用了:
console
关键字(提供 myscript.py 作为列表中的唯一元素)zipfile
关键字(设置为 True)options
关键字与optimize: 2
、bundle_files: 1
和compressed: 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功率shell
编辑 3: 这是在 Windows 8.1 上完成的:
- Python 3.4.2
- py2exe 0.9.2.2
- 功率shell 4.0
最终的可执行文件也在 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
是.exe文件名引起的。切换到不同的文件名,停止 UAC 请求管理员权限并在相同的 shell.
中执行软件名字是:
<project_name_under_NDA>_update.exe
但切换到
try.exe
成功了。