我有一个通常从Windows PowerShell调用的Python脚本,带有一些命令行参数。 我想以.exe格式分发这个脚本,并且我想保留基于控制台的相同“用户界面”的用法。
用户从shell调用myscript.exe程序:
myscript.exe argument1 argument2 argument3
该程序在相同的控制台中执行,并将其输出写入同一控制台 。
其实我有一个myscript.exe程序,这当然从PowerShell获得参数,但不幸的是,执行程序在另一个在调用产生的控制台。
我怎样才能避免这种行为,并保持在同一个控制台的一切?
编辑:我已经按照http://www.py2exe.org/index.cgi/Tutorial上的教程。
对于我使用的setup.py构build文件:
console
关键字(提供myscript.py作为列表中的唯一元素) zipfile
关键字(设置为True) options
关键字optimize: 2
, bundle_files: 1
, compressed: True
。 编译工作正常,程序做它应该做的事情。 唯一不希望的是打开一个专用的控制台,而不是在同一个控制台上执行。
编辑2:这正是我的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, )
我只是打电话给脚本input:
python setup.py
在Windows PowerShell中
编辑3:这已在Windows 8.1上完成:
最终的可执行文件也在没有安装Python的Windows 10系统上进行过testing。 它的工作,但显示相同的控制台产卵行为。
看来,我已经找到了答案,在这个答案的帮助下,通过这个答案 。 这个问题也与这个问题有关。 一个常见的原因产生了两个不同但相关的问题
这是由.exe文件名造成的。 切换到不同的文件名,停止UAC要求管理员权限,并在同一个shell中执行软件。
名字是:
<project_name_under_NDA>_update.exe
但切换到
try.exe
有效。
希望以下可能会有所帮助。 在标准的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
测试了这个。