[Risolto] Comando "exec"

Linguaggi di programmazione: php, perl, python, C, bash e tutti gli altri.
carm960
Prode Principiante
Messaggi: 35
Iscrizione: sabato 6 maggio 2017, 2:06
Desktop: ubuntustudio
Distribuzione: Ubuntu 17.04 - x86_64
Sesso: Maschile
Località: Napoli

[Risolto] Comando "exec"

Messaggio da carm960 »

Salve a tutti.

Sto facendo pratica con python e ho provato a creare un piccolo menu in python 3 con due Button per selezionare la idle di pyton 2 o quella di python 3 utilizzando il comando "exec(open('/usr/bin/idle').read())" e "exec(open('/usr/bin/idle3').read())", ma mi parte sempre la idle di python 3.
Se invece lo scrivo in python 2 mi parte solo la idle del 2.
Facendo altri test pare che un interprete non riesce a richiamare l'altro, c'è una soluzione?

Grazie.
Ultima modifica di carm960 il mercoledì 24 maggio 2017, 8:26, modificato 2 volte in totale.
Avatar utente
crap0101
Rampante Reduce
Rampante Reduce
Messaggi: 8242
Iscrizione: martedì 30 ottobre 2007, 6:33
Desktop: LXDE
Distribuzione: Ubuntu 18.04.1 LTS
Sesso: Maschile
Località: TO
Contatti:

Re: Comando "exec"

Messaggio da crap0101 »

exec è lo strumento sbagliato per quello che vuoi fare
crap0101@orange:/tmp/foo$ pydoc exec | head
The "exec" statement
********************

exec_stmt ::= "exec" or_expr ["in" expression ["," expression]]

This statement supports dynamic execution of Python code. The first
expression should evaluate to either a Unicode string, a *Latin-1*
encoded string, an open file object, a code object, or a tuple. If it
is a string, the string is parsed as a suite of Python statements
which is then executed (unless a syntax error occurs). [1] If it is an
essendo /usr/bin/idle uno script python:

Codice: Seleziona tutto

crap0101@orange:/tmp/foo$ cat /usr/bin/idle
#! /usr/bin/python

from idlelib.PyShell import main
if __name__ == '__main__':
    main()
quel codice viene eseguito dall'interprete che stai utilizzando (e accidentalmente - ma neanche tanto) dato che la sintassi del modulo idlelib è identica nelle due versioni non hai neanche errori.
btw, se vuoi avviare un processo (un qualsiasi processo) usa subprocess, visto che in questo caso che sia o meno scritto in python non dovrebbe interessarti.
http://www.gnu.org/ http://boinc.berkeley.edu/ http://www.python-it.org/
- Ricorda le ultime parole di suo padre: «Sta' alla larga dalle chiese, figlio. La sola cosa per cui hanno la chiave è il merdaio. E giurami che non porterai mai un distintivo della legge» - W.S. Burroughs
carm960
Prode Principiante
Messaggi: 35
Iscrizione: sabato 6 maggio 2017, 2:06
Desktop: ubuntustudio
Distribuzione: Ubuntu 17.04 - x86_64
Sesso: Maschile
Località: Napoli

Re: Comando "exec"

Messaggio da carm960 »

Grazie per l'aiuto ora lo script funziona perfettamente.

Codice: Seleziona tutto

from tkinter import *
import subprocess

def funzione_1 ():
    finestra.destroy()
    subprocess.run(['idle'])
def funzione_2 ():
    finestra.destroy()
    subprocess.run(['idle3'])

finestra = Tk()

finestra.geometry("300x150+810+390")
finestra.title("      Python Chooser")

testo_0 = Label (finestra, text="").pack()
testo_1 = Label (finestra, text=" Scegli la versione ",  fg="white",  bg="gray").pack()
testo_2 = Label (finestra, text="").pack()

pulsante_1 = Button(text="Python 2.7",  command=funzione_1).pack()
pulsante_2 = Button(text="Python 3.5",  command=funzione_2).pack()

finestra.mainloop()
Scrivi risposta

Ritorna a “Programmazione”

Chi c’è in linea

Visualizzano questa sezione: 0 utenti iscritti e 2 ospiti