Please ignore secret bonuses. Secret tests do NOT award bonus. Max hw grade is 30+2 bonus efficiency

Do you need help?

Notice Board

Per partecipare al corso di Fondamenti di programmazione 2023-24 loggatevi e attivatelo nella vostra pagina dei corsi preferiti. A quel punto il corso appare nel menù personale cliccando sul proprio avatar. Per i materiali degli anni precedenti seguite lo stesso metodo.

To join the Programming/Lab 2023-24 course, log-on and select it on the my courses page. It will appear on the personal menu of your avatar. For earlier years use the same method.

È possibile lanciare una propria applicazione con estensione .py dalla finestra dell'app terminale di Mac OS X ? [poll]

A
Alessandro82 (750 points)
4 12 16
in Programmare in Python by (750 points)
reshown by
Buonasera! Stavo provando a lanciare un mio programmino dalla finestra del' app terminale di Mac OSX... Tuttavia, una volta scritto il percorso del file l'app "terminale"  pur non rappresentandomi errori, in seguito all'invio mi visualizza sempre la dicitura "quote> "... a questa che presumo come una richiesta di istruzione successiva posso far seguire l'inserimento di valori numerici come la mia app teoricamente vorrebbe...ma alla mandata in esecuzione l'app terminale mi visualizza  a ogni dato fornito sempre la stessa precitata dicitura "quote>".  È  una strana pretesa la mia o sto sbagliando qualcosa? Grazie mille
### no choices found for poll!

2 Answers

Ionut Cicio (5960 points)
2 2 43
by (6.0k points)

Virgolette alla riscossa

Penso di aver capito il tuo problema, e forse la soluzione è https://code2care.org/q/come-out-of-dquote-prompt-in-macos-terminal-linux, però ti chiederei gentilmente di allegare qualche screenshot del terminale in modo da avere una base su cui operare (magari, quando qualcuno descrive un problema ignora alcuni dettagli che sembrano superflui ma sono fondamentali). Comunque si, è possibile lanciare un file Python dal terminale.

Ed i comandi?

Sarei grato anche se potresti direttamente scrivere i comandi che hai usato nel terminale nello specifico? A volte bastano anche quelli per poter replicare il problema (la replicabilità è fondamentale per poter condividere l'errore con gli altri)

Nomenclatura

Sostanzialmente la "finestra" a cui ti riferisci corrisponde all'App terminale, sono sinonimi (https://en.wikipedia.org/wiki/Terminal_emulator). Quindi bastava scrivere "dal terminale di Max OS X" nel titolo ed era chiarissimo a cosa ti riferivi smiley

A
Alessandro82 (750 points)
4 12 16
by (750 points)

Ti ringrazio dei tuoi consigli. Ho visto il link e ora so a cosa si riferisce "quote" ...ossia il terminale di Mac OS X (p.s.: diciamo che nel precedente post per volermi esprimere meglio mi sono espresso peggio... laugh) si aspetta che scrivi qualcosa tra virgolette con i vari rientri a capo che mi necessitano. Per lo screenshot purtroppo mi è emerso un altro problemino...non riesco a postare immagini su q2a! Comunque qualora potessi essere più chiaro per tutti: non ho digitato alcun comando su terminale Mac OS X  che non fosse esclusivamente il percorso della directory del mio programma, seguito dal  nome del mio programma(con ovviamente la sua estensione .py)... Al mio tentativo del pomeriggio mi compariva appunto "quote" ...ora stavo riprovando ... ma il terminale di OS X ora  non mi trova proprio il file.... Sicuramente sbaglio a priori il metodo per lanciare le applicazioni dallo stesso ... Sarei ora proprio curioso di sapere come si fa. Grazie 

Ionut Cicio (5960 points)
2 2 43
by (6.0k points)
edited by

CLI 101: usare un programma custom su Unix mail

Una "non così breve" guida

L'idea sarebbe quella di spiegarti come si prende un programma Python, o un qualunque script (anche shell) e si trasforma in un programma che puoi usare quando e dove vuoi nella CLI (senza neanche dover specificare il percorso)! La guida può essere utile per quando vuoi automatizzare un compito che ti trovi a fare spesso da terminale o vuoi utilizzare un programma che hai scritto te stesso nella CLI! (il programma poi può interagire con altri strumenti Unix, per cui puoi usare "cron" per farlo eseguire ad ogni ora etc..., o lo puoi usare come servizio all'avvio del sistema, o puoi analizzare l'output di un altro programma e darlo in pasto al tuo programma etc... le possibilità sono infinite).

La guida mostra i passaggi per Void Linux (quindi per sistemi GNU/Linux in generale), non è detto che funzioni allo stesso identico modo su MacOs, ma sono abbastanza fiducioso che funzioni).

Of course. I'm a Terminator! enlightened

Prima di tutto, dobbiamo decidere cosa fa il nostro programma e come chiamarlo... per esempio, lo possiamo chiamare "terminator" e possiamo fargli aggiungere "You are terminated!" all'inizio di un test e "Of course. I'm a Terminator!" alla fine (è una cosa che mi capita di fare spesso). Adesso si può procedere a creare il file e scrivere il codice:

mkdir terminator
cd terminator
touch terminator

Nota* "touch terminator" è il comando per creare il file Python (come si nota, non ci ho messo l'estensione .py, non è necessaria l'estensione nei sistemi Unix). Si può procedere a modificare il contenuto del file con un editor a tua scelta.

#!/usr/bin/env python3

text = input()
print(f'You are TERMINATED {text} - Of course. I\'m a Terminator.')

Nota* Quel #! all'inizio si chiama "shebang", e si usa per specificare alla shell con quale programma deve aprire il file. Nel nostro caso, in particolare, gli stiamo dicendo che il file va letto e interpretato con Python3. A questo punto dobbiamo solo trasformare il file in un file eseguibile!

editor

chmod +x terminator
./terminator

Nota* Con "chmod +x terminator" stiamo dicendo di aggiungere il permesso di esecuzione (+x) al file "terminator". Alla riga sotto, stiamo eseguendo il file per vedere se funziona!

Collegamenti simbolici frown

Adesso, il problema che abbiamo è che bisogna specificare ogni volta il percorso del file per poterlo eseguire, perché la shell non sa dove andare a cercare quando gli passiamo come comando "terminator"! Per fortuna, abbiamo la variabile d'ambiente $PATH dalla nostra parte!

echo $PATH

Il comando echo $PATH ti fa vedere cosa c'è dentro alla variabile $PATH, e sono tutta una serie di percorsi in cui la shell va a cercare un comando, quindi basta mettere il programma dentro ad una di quelle directory perché sia riconosciuto. Nel mio caso, o comunque in generale, quello che si preferisce fare è creare un "collegamento simbolico" dentro a una delle directory nelle $PATH (si, proprio come i collegamenti Desktop di Windows). Altre soluzioni includono: mettere il file direttamente dentro a una di quelle cartelle, ad esempio /usr/local/bin/, oppure modificare la variabile $PATH stessa e aggiungere la cartella dove sta il tuo programma (nel mio caso ~/terminator/).

cd /usr/local/bin
sudo ln -s ~/terminator/terminator terminator

Nota* il primo parametro del comando ln -s è il percorso del tuo programma, il secondo parametro è il nome del collegamento simbolico.  

You are terminated!

Ora puoi usare il tuo comando dove e come vuoi. Puoi entrare in qualunque directory e usare terminator come comando! Molto probabilmente (mi sto accorgendo ora)terminator non è stato un buon nome per il nostro programma, considerando che il mio window manager (i3) pensava che fosse il mio terminale, quindi ogni volta che premevo la shortcut Alt+Invio mi apriva terminator e non il mio terminale indecision

terminator examples

A
Alessandro82 (750 points)
4 12 16
by (750 points)
Grazie della tua più che esaustiva  guida! Ho provato in modo veloce e ho avuto qualche problemino. Appena ho un po' di tempo e riesco a sperimentare la tua soluzione con un po' più di tempo e impegno ti aggiorno. ;-)
Ionut Cicio (5960 points)
2 2 43
by (6.0k points)

Non avendo mai postato una domanda non so se ti compare un qualcosa per "accettare la risposta come migliore"enlightened

A
Alessandro82 (750 points)
4 12 16
by (750 points)
Caro Ionut. A parte la possibilità del like che ti ho messo sempre e seduta stante visto che alquanto meritati non vedo, spero non sia per mia mancanza, voci selezionabili come quella che mi dici. Purtroppo non sono riuscito per mancanza di tempo a sfruttare appieno le tutte tue dritte in proposito ma lo farò quanto prima. Buona serata e a presto