2016-07-27 100 views

回答

0

使用ShellExecuteEx函數。

BOOL ShellExecuteEx(
_Inout_ SHELLEXECUTEINFO *pExecInfo 
); 

這是pExecInfo: *** n顯示 - 標誌指定的應用程序是如何顯示,當它打開時

typedef struct _SHELLEXECUTEINFO { 
    DWORD  cbSize; 
    ULONG  fMask; 
    HWND  hwnd; 
    LPCTSTR lpVerb; 
    LPCTSTR lpFile; 
    LPCTSTR lpParameters; 
    LPCTSTR lpDirectory; 
    int  nShow;/*=0 if you don't want the console window to appear*/ 
    HINSTANCE hInstApp; 
    LPVOID lpIDList; 
    LPCTSTR lpClass; 
    HKEY  hkeyClass; 
    DWORD  dwHotKey; 
    union { 
    HANDLE hIcon; 
    HANDLE hMonitor; 
    } DUMMYUNIONNAME; 
    HANDLE hProcess; 
} SHELLEXECUTEINFO, *LPSHELLEXECUTEINFO; 
3

嘗試使用Python的pythonw.exe可執行文件來啓動你的腳本。

在Windows操作系統,可執行文件是控制檯應用程序python.exe與出w是一個控制檯應用程序)的運行表示控制檯窗口;另一方面,常規Windows應用程序不會產生黑色控制檯窗口。

你可以找到關於這兩個可執行文件的細節在這個古老的問題:pythonw.exe or python.exe?

以及有關Windows不同類型的應用程序在這裏:Difference between Windows and Console application

+0

謝謝,現在我從C運行像巨蟒文件這個:system(「python.pyw」)。我應該如何執行它? – David

+1

@David,'system'使用cmd來運行程序,當您從非控制檯程序運行非控制檯程序時,該程序會短暫地閃爍控制檯。如果你沒有傳遞參數給腳本,你可以使用'os.startfile(「script.pyw」)'。但首先修復.pyw文件關聯。 '[HKLM | HKCU] \ Software \ Classes \ .pyw'的默認值應該是'Python.NoConFile'。然後使用右鍵單擊「打開方式」對話框選擇始終使用Python for .pyw腳本。如果有多個Python條目,請全部嘗試,直到它正常工作,但*不*「在此PC上查找另一個應用程序」。 – eryksun

-1

從另一個帖子此信息可以幫助:https://stackoverflow.com/a/30313091/6470259

  • python.exe是一個控制檯(終端)應用程序在上啓動CLI型腳本。 *除非從現有控制檯窗口運行,否則將打開一個新的控制檯窗口,其中 python.exe。 * 標準流 sys.stdinsys.stdoutsys.stderr連接到 控制檯窗口。 *執行是同步

    • 如果創建一個新的控制檯窗口,它一直開到腳本終止。
    • 從現有控制檯窗口調用時,提示將被阻止,直到腳本終止。
  • pythonw.exe是推出一個GUI應用程序GUI /無UI不惜一切腳本。 * NO控制檯窗口已打開。 *執行是 異步

    • 當從一個控制檯窗口調用腳本僅僅是推出和提示立即返回,腳本是否仍在運行與否。 * 標準流sys.stdin, sys.stdoutsys.stderr不可用
    • 注意除非你採取額外的步驟,這有可能意想不到的副作用
      • 未處理的異常導致腳本中止默默
      • 在Python 2.x中,簡單地嘗試使用print()會導致發生這種情況(在3.x中,print()根本沒有效果)。
        • 防止從腳本,並瞭解更多內,看到 礦this answer
        • 特設,可以使用輸出重定向謝謝,@handle。pythonw.exe yourScript.pyw 1>stdout.txt 2>stderr.txt(來自PowerShell:cmd /c pythonw.exe yourScript.pyw 1>stdout.txt 2>stderr.txt)捕獲 標準輸出和標準輸出文件。如果您確信使用的 print()是你的腳本 pythonw.exe靜靜地失敗的唯一原因,而你不感興趣的標準輸出輸出,使用 @手柄的命令,從評論:pythonw.exe yourScript.pyw 1>NUL 2>&1
          買者:該輸出重定向技術貌似不是調用時工作*.pyw腳本直接(而不是 將腳本文件路徑傳遞給pythonw.exe)。 如果您知道爲什麼和/或它是否適合您,請告訴我是否 。

您可以將可執行文件的通過 默認運行腳本控制 - 通過選擇 正確的文件擴展名 - 例如從資源管理器打開時,如:

  • *.py文件默認關聯(引用)與python.exe
  • *.pyw文件默認關聯(引用)與pythonw.exe
+0

無恥抄襲[這裏](http://stackoverflow.com/a/30313091/1222951)。 –

0

在所有的Python安裝,因爲2.5(甚至更早),如果安裝已處理得當,.py文件關聯到python.exe.pyw文件關聯到pythonw.exe

如果關聯已被篡改,或覆蓋特定用戶,這可能是不同的。

運行在一個cmd下面的命令:

ftype | find "pythonw" 
assoc | find ".pyw" 

我得到:

Python.NoConFile="D:\Program Files\Python27\pythonw.exe" "%1" %* 
.pyw=Python.NoConFile 

如果你沒有,你可以採取一些措施來解決這個問題:

  1. 重新安裝/修復python安裝(運行安裝程序,它會建議修復安裝)
  2. 如果您不是機器的管理員,則可以將.pyw文件與pythonw.exe關聯。與小問題,你必須修改註冊表項之後增加額外的參數或在您.pyw文件拖放參數不會考慮到這一點(它很少使用,但仍然)

    [HKEY_CLASSES_ROOT\Python.NoConFile\shell\open\command] @="\"L:\\Portable_Python_2.7.3.1\\App\\pythonw.exe\" \"%1\" %*"

+0

最好修改'HKLM \ Software \ Classes'或'HKCU \ Software \ Classes'。 HKCR虛擬鍵是這兩棵樹的合併視圖,因此修改它的結果取決於當前定義的鍵。合併使用'HKCR'的.reg文件可能會修改'HKCU'中的子密鑰(如果存在),否則將修改'HKLM'中的子密鑰(如果存在),否則在'HKLM'中創建子密鑰。因此,密鑰及其子密鑰最終可能會部分爲當前用戶定義,並部分爲本地計算機定義。 – eryksun

+0

請注意,cmd的'assoc'和'ftype'命令僅顯示和修改'HKLM \ Software \ Classes'鍵,這些鍵僅爲用戶在資源管理器中的選擇定義了一種可能性。還有其他地方可以定義文件關聯,例如'[HKCU | HKLM] \ Software \ Classes \ Applications'以及'[HKCU | HKLM] \ Software \ Classes \ SystemFileAssociations'下的默認值。用戶當前的選擇位於HKCU \ Software \ Microsoft \ Windows \ CurrentVersion \ Explorer \ FileExts中,但只能使用GUI對其進行修改。 – eryksun

相關問題