2012-04-12 159 views
7

我使用Windows的Python版本。我有一個使用Pyside的Python腳本(沒有什麼複雜的,一種「hello world」)。我們可以知道從Windows或文本終端啓動了Python腳本嗎?

當我點擊我的腳本文件,或者如果我從命令行啓動它,它會很好地執行,我有一個GUI出現。

但是,如果腳本從文本終端(cmd.exe,cygwin,...)啓動,我想避免使用GUI。一種能夠自動識別它是否應該具有GUI輸出或文本輸出的腳本。

有沒有簡單的方法來做到這一點?我希望能夠通過Windows版本的Python不是Cygwin軟件包附帶的版本)來實現。

當我從文本終端啓動腳本時,一個顯而易見的方法是添加一種「--no-gui」參數,但我不知道Python(或某些Python庫)是否已經爲此提供了工具。

此外,我在這臺計算機上有一個SSH服務器(Cygwin-base),我可以在距離執行腳本但沒有GUI出現(當然),我沒有錯誤消息。這是一個非常有趣的情況,因爲缺少Windows圖形支持或者腳本應該爲文本終端調整其輸出,從而知道腳本是否失敗。

+2

它不是重複的,因爲這個問題是關於Windows,但在http://stackoverflow.com/questions/3818511/how-to-tell-if-python-script-is-being-run的討論-in-a-terminal-or-via-gui可能會有所幫助。 – 2012-04-12 08:38:30

+1

更多討論也在這裏:http://stackoverflow.com/questions/1285024/how-can-i-check-to-see-if-a-python-script-was-started-interactively – Jiri 2012-04-12 13:28:32

回答

1

我知道你可以運行文件爲.py文件或.pyw文件。第二個選項用於GUI應用程序,它不打開控制檯窗口。爲了區分這兩種情況,你可以檢查isatty方法sys.stdout

import sys 
if sys.stdout.isatty(): 
    # .py file is running, with console window 
    pass 
else: 
    # .pyw file is running, no console 
    pass 

編輯

  • 我試圖運行與膩子+ SSH在Linux操作系統中 - 它返回True。
  • 我試圖用msys的bash shell上的Windows中 - 它返回True(.py文件)
  • 我試圖用cygwin的bash shell使用Cygwin蟒蛇 - 返回(.py文件)真
  • 不幸的是,我沒有可能嘗試putty + windows cygwin ssh服務器。
+0

你也可以用' pythonw.exe'在沒有控制檯的情況下運行。 – bereal 2012-04-12 08:33:39

+0

有趣,但不適用於所有情況。從cmd.exe和單擊該文件時,對於.pyw,isatty()爲True,對於.pyw爲False,所以您的想法很有效。從cygwin和SSH會話(Putty和ssh for cygwin),isatty()是False(提醒我使用Windows版本的Python,而不是Cygwin)。或者我錯過了什麼? – 2012-04-12 08:34:02

+0

我真的很抱歉,但我再次測試過,與您的編輯說的相反,它不適用於Cygwin bash shell。你使用了哪個Python版本?我特別提到Windows版本的Python,而不是Cygwin軟件包中的版本(我同意它會返回True,但它的想法是使用Python for Windows)。 – 2012-04-12 11:04:53