2015-09-20 50 views
1

我有一个Python脚本,通常使用一些命令行参数从Windows PowerShell中调用。我想以.exe格式分发这个脚本,并且我想保留基于控制台的相同“用户界面”的用法。如何在不产生新控制台窗口的情况下执行控制台EXE?

  1. 用户打开Windows Powershell。
  2. 用户从外壳调用myscript.exe程序:

    myscript.exe argument1 argument2 argument3 
    
  3. 该程序在同一控制台执行并在同一控制台将其输出。

其实我有一个myscript.exe程序,这当然从PowerShell中获取的参数,但不幸的是,其中在呼叫催生了另一个控制台执行程序。

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

编辑: 我已按照教程http://www.py2exe.org/index.cgi/Tutorial

对于我的setup.py build文件我用:

  • console关键字(提供myscript.py在列表中唯一的元素)
  • zipfile关键字(设置为true)
  • options关键字optimize: 2,bundle_files: 1compressed: 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

最终的可执行文件也已经没有任何Python安装在Windows 10系统上进行测试;它的工作,但显示相同的控制台产卵行为。

+1

hm,通常,python只是打印到'stdout',这意味着不应打开第二个控制台窗口。然后再次,我不是一个真正的Windows用户... –

+1

@MarcusMüller我刚刚说同样的事情。可能是因为'py2exe'以某种方式编译可执行文件,以至于它总是会产生一个新的控制台主机 –

+0

是的,我想这是一个py2exe功能。但我想知道如何避免它。 – auserdude

回答

2

看起来我已经在this answer的帮助下找到了自己的答案,由this answer连接。该问题也与此other问题有关。一个常见原因产生了两个不同但相关的问题。

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

的名字是:

<project_name_under_NDA>_update.exe 

但切换到

try.exe 

它的工作。

+0

下面是一个[示例setup.py](http://pastebin.com/rsrsWZZv),它在可执行文件中嵌入了一个清单,请求“asInvoker”执行级别。这样你不必重命名文件。 – eryksun

+0

如果这适用于你(它适用于我在Windows 10中),那么请将它包含在你的答案中,作为更改文件名的更明确的替代方案。 – eryksun

0

希望以下内容可能有所帮助。这工作得很好,我都在标准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 

如果这仍然会产生一个独立的外壳,还有的PowerShell的设置,可以改变你的结果的任何环境变量?

我已在Python 2.7.9 |Anaconda 2.2.0 (32-bit)py2exe 0.6.9中对此进行了测试。

+0

我已经添加了代码......它看起来几乎与您使用的代码相同。 – auserdude

+0

你能够在另一台PC上测试你的EXE吗? –

+0

是的,当然。它在另一台PC上工作,在没有任何Python安装的Windows 10上运行。 – auserdude

相关问题