2015-09-20 53 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

相關問題