Forum >> Principianti >> In quale ambiente sto mandando in esecuzione lo script?

Pagina: 1

Ciao ragazzi, sono nuovo del forum e mi sto appassionando a questo linguaggio...
Ho una domanda da porre, e che è anche il titolo di questo post.

Più precisamente vorrei che lo script in Python che mando in esecuzione individuasse in quale "ambiente" sta lavorando, per esempio, l'IDLE in fase di test o la shell UNIX, ma questo può essere esteso anche al terminale WINDOWS oppure altri sistemi operativi.

Grazie anticipatamente a coloro che vorranno aiutarmi. :py:



molto rapidamente perché sono in treno: prova "import sys; print(sys.executable)": questo ti dà l'eseguibile python che sta lavorando in quel momento. Da lì puoi discriminare per le tue esigenze.
Grazie RicPol per il tuo interessamento, la tua idea, cercando in rete, mi ha portato a questo:

import os

for name in os.environ:
print(name)

qui praticamente ci sono le variabili d'ambiente dello script in esecuzione; ho visto che sono diverse da IDLE e su Shell (devo ancora provare su Windows). Ho fatto una ricerca per una variabile, ad esempio TERM (che in IDLE non c'è):

if any('TERM' in name for name in os.environ):
# codice per SHELL
else:
# codice per IDLE












--- Ultima modifica di Robbizz in data 2019-07-04 23:06:25 ---
Uhm, sì certo os.environ è una possibilità ma mi sembra che stai andando a cacciarti in cose MOOOOLTO specifiche... devi capire che os.environ è un mapping messo a disposizione dall'ambiente di esecuzione, che può scriverci un po' quello che vuole... o anche non scriverci niente... cioè, in definitiva dipende da quanto sei in un ambiente posix-complaint...


Per dire, prendi Windows... ehm... se tu avvi una normale shell di windows (cmd.exe per capirci), e da lì provi a fare
>>> import os
>>> os.environ['TERM']
ti becchi una bella eccezione perché semplicemente cmd.exe non si cura di riempire quel dato in os.environ. D'altra parte, se invece usi una shell "preparata" come ConEmu/Cmder (cosa che io faccio sempre), allora "TERM" è "cygwin"... ma alla fine è la stessa shell, dal punto di vista di python... E su Mac le cose possono andare in modo anche diverso...





Ora, qui mi sa che il punto sarebbe capire il famoso "che-cosa-stai-cercando-di-fare-davvero". Il mio sospetto è che stai cercando di risolvere un problema reale nel modo sbagliato. Se ti serve differenziare un ambiente "di sviluppo" da un ambiente "di produzione", per dire, le strategie sono in genere altre.


In ogni caso, se ti basta sapere quale eseguibile sta lavorando il tuo script (cosa che può dirti se sei in un virtual environment, per esempio) allora "sys.executable" è la strada giusta. Se hai bisogno di capire dove sono diretti gli standard stream (altra cosa utile, visto che una shell grafica come IDLE tipicamente re-dirige lo stream verso la propria finestra), allora vedi che cosa ti dice "sys.stdout" per esempio. Arrivare fino allo specifico di os.environ... boh, certamente puoi farlo ma mi sembra davvero eccessivo così a prima vista.

Guarda... ho addirittura installato Python su un mio vecchio portatile Windows x86 ed effettivamente nelle variabili d'ambiente non posso fare affidamento visto che in questo SO sono praticamente identiche sia in IDLE che in cmd.exe

Comunque lo sto studiando da un mese, quando ho tempo... ho fatto un piccolo script che mi permette di creare degli istogrammi in base a dei dati in ingresso usando semplicemente lo spazio del tipo:

print("\x1b[6;;41m" + " " + "\x1b[0m", end = "")

quindi non usando la grafica, e ho notato che questo sistema funziona solamente sul mio Mac, e solo facendo eseguire lo script da shell; se cerco di far eseguire da IDLE i codici su esposti non vengono interpretati e quindi ho deciso di usare degli asterischi in quei ambienti dove appunto non c'è l'interpretazione di questo codice (quindi anche sul mio windows XP usando Python 2.7.15).

Ho provato questa notte ad utilizzare sys.executable e diciamo che ho risolto in parte visto che posso sapere se mi trovo su MacOS oppure su Windows, ma non ho ancora trovato il sistema per capire se chi sta mandando in esecuzione il programma lo sta facendo da IDLE oppure no (a parte usando le variabili d'ambiente!).

L'idea futura sarebbe quella di dare in pasto a questo programma dei dati estrapolati dal mia banca per crearmi una sorta di resoconto...

Grazie RicPol


--- Ultima modifica di Robbizz in data 2019-07-05 03:17:48 ---
Ah, ecco. Quello che vuoi sapere è se la tua console supporta i colori ANSI... cosa che in effetti non è facilissimo, visto che dipende dal sistema operativo, dalla versione del sistema operativo, dalla console usata.


Tieni conto che il modo giusto per conoscere il sistema operativo è interrogare "sys.platform".


Poi va detto (e me n'ero dimenticato) che puoi sapere se la tua console python è eseguita da un terminale o in una console grafica (come IDLE) interrogando "sys.stdin.isatty" (per tutto questo, guarda la documentazione).


Tutto questo e altre tecniche già viste potrebbero avvicinarti a quello che vuoi fare... Ma in realtà la soluzione giusta potrebbe semplicemente essere di usare Colorama https://pypi.org/project/colorama/ e non preoccuparsi più di queste cose.


Ovviamente non ho la più pallida idea di come tutto questo possa funzionare su XP... non ho la più pallida idea di come XP possa funzionare e basta... Nel 2019 quando sento ancora qualcuno che dice "XP" francamente spalanco le braccia e lascio perdere...

Alla fine RicPol mi sono piegato a colorma, forse perché è anche più facile da implementare rispetto alle sequenze ANSI.
Ho dato un'occhiata al sys ... beh fantastico! C'è da perdere la testa!




Ora mi metto a studiare.. speriamo di non fare le 4 come stanotte! :py: :py: :py: :py:


Pagina: 1



Esegui il login per scrivere una risposta.