2012-04-12 17 views
7

Io uso la versione Windows di Python. Ho uno script Python usando Pyside (niente di complicato, una sorta di "ciao mondo").Possiamo sapere se uno script Python viene lanciato da Windows o da un terminale testuale?

Quando faccio clic sul mio file di script o se lo avvio da una riga di comando, si esegue perfettamente e ho una GUI che appare.

Tuttavia, vorrei evitare di avere una GUI se lo script viene lanciato da un terminale testuale (cmd.exe, cygwin, ...). Una specie di script che sa automaticamente se deve avere un output GUI o un output testuale.

C'è un modo facile e semplice per farlo? Voglio essere in grado di farlo con la versione di Python di Windows (e non quella che arriva con i pacchetti Cygwin).

Un modo ovvio sarebbe aggiungere una sorta di parametro "--no-gui" quando avvio lo script da un terminale testuale, ma mi chiedo se Python (o alcune librerie Python) già fornisca strumenti per questo.

Inoltre ho un server SSH (Cygwin-base) su questo computer, posso eseguire lo script a distanza ma nessuna GUI appare (ovviamente) e non ho alcun messaggio di errore. È un caso in cui è molto interessante sapere se lo script è fallito a causa della mancanza del supporto grafico di Windows o se lo script deve adattare il suo output per un terminale testuale.

+2

non la sua un duplicato dal momento che questa domanda è su Windows, ma la discussione in http://stackoverflow.com/questions/3818511/how-to-tell-if-python-script-is-being-run -in-un-terminale-o-via-gui potrebbe essere utile. –

+1

Un'altra discussione è anche qui: http://stackoverflow.com/questions/1285024/how-can-i-check-to-see-if-a-python-script-was-started-interactively – Jiri

risposta

1

So che è possibile eseguire il file come file .py o come file .pyw. La seconda opzione è utilizzata per le applicazioni GUI e non apre la finestra della console. Per distinguerli in due casi è possibile controllare il metodo isatty di sys.stdout.

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

EDIT:

  • ho cercato di correre che con stucco + ssh sulla scatola di linux - restituisce True.
  • Ho cercato di usare msys shell bash sulla scatola finestre - è restituisce True (file .py)
  • Ho cercato di usare shell bash Cygwin con Cygwin pitone - restituisce Vero (file .py)
  • Purtroppo, Non ho la possibilità di provare il server sty cgwin di windows + windows.
+0

Puoi anche usare ' pythonw.exe' da eseguire senza console. – bereal

+0

Interessante, ma non funziona in tutti i casi. Da cmd.exe e quando si fa clic sul file, isatty() è True per .py e False per .pyw, quindi la tua idea funziona bene. Da cygwin e una sessione SSH (Putty e ssh per cygwin), isatty() è False (per ricordare, io uso la versione Windows di Python, non quella di Cygwin). O mi manca qualcosa? –

+0

Sono davvero dispiaciuto, ma l'ho testato ancora una volta, e contrariamente a quello che dice la tua modifica, non funziona con la shell bash Cygwin. Quale versione di Python hai usato? Sto specificatamente parlando della versione Windows di Python, non di quella che viene fornita con i pacchetti Cygwin (sono d'accordo che restituisce True per questo, ma l'idea è usare Python per Windows). –

Problemi correlati