Come eseguire uno script python dalla shell interattiva IDLE?


103

Come eseguo uno script python dall'interno della shell interattiva IDLE?

Quanto segue genera un errore:

>>> python helloworld.py
SyntaxError: invalid syntax

Che helloworld.pyaspetto ha?
TerryA

sì significa che qualcosa non va con il tuo codice inserisci il tuo codice!
Seriale

12
No, non necessariamente. È probabile che l'OP stia digitando python helloworld.pyin una finestra della shell IDLE e che non funzioni.
Ned Deily

Né funzionerebbe nell'interprete standard. Questo problema è emerso prima in cui le persone pensano erroneamente che il prompt dell'interprete sia un prompt della riga di comando.
Terry Jan Reedy

Dovresti accettare la risposta di Ned Deily se questa risponde correttamente alla tua domanda. Ciò aiuterà anche gli altri sviluppatori a individuare rapidamente la risposta corretta.
Krishna Oza

Risposte:


142

Python3 :

exec(open('helloworld.py').read())

Se il tuo file non si trova nella stessa directory:

exec(open('./app/filename.py').read())

Vedere https://stackoverflow.com/a/437857/739577 per il passaggio di variabili globali / locali.


Nelle versioni deprecate di Python

Funzione incorporata di Python2 : execfile

execfile('helloworld.py')

Normalmente non può essere chiamato con argomenti. Ma ecco una soluzione alternativa:

import sys
sys.argv = ['helloworld.py', 'arg']  # argv[0] should still be the script name
execfile('helloworld.py')

Deprecato dal 2.6: popen

import os
os.popen('python helloworld.py') # Just run the program
os.popen('python helloworld.py').read() # Also gets you the stdout

Con argomenti:

os.popen('python helloworld.py arg').read()

Utilizzo avanzato : sottoprocesso

import subprocess
subprocess.call(['python', 'helloworld.py']) # Just run the program
subprocess.check_output(['python', 'helloworld.py']) # Also gets you the stdout

Con argomenti:

subprocess.call(['python', 'helloworld.py', 'arg'])

Leggi i documenti per i dettagli :-)


Testato con questa base helloworld.py:

import sys
if len(sys.argv) > 1:
    print(sys.argv[1])

2
Puoi aggiungere un esempio anche con argomenti della riga di comando.
ViFI

1
Non funziona con Python3 e il richiedente non ha specificato esplicitamente la versione di Python
Suncatcher

Aggiunto execper Python3
Hugues Fontenelle

35

Puoi usarlo in python3:

exec(open(filename).read())

24

La finestra della shell IDLE non è la stessa di una shell di terminale (ad esempio in esecuzione sho bash). Piuttosto, è proprio come essere nell'interprete interattivo Python ( python -i). Il modo più semplice per eseguire uno script in IDLE è usare il Opencomando dal Filemenu (questo può variare leggermente a seconda della piattaforma in esecuzione) per caricare il file di script in una finestra dell'editor IDLE e quindi utilizzare il comando Run-> Run Module(scorciatoia F5).


1
Ma non puoi passare argomenti. :(
Erica Kane

3
Sfortunatamente no, non è facile eseguire un file Python in IDLE passando gli argomenti della riga di comando. C'è un problema aperto di vecchia data per IDLE per farlo ( bugs.python.org/issue5680 ). Una soluzione alternativa per il test è inizializzare manualmente sys.argvall'inizio del programma, ad esempio, sotto il solito if __name__ == "__main__"boilerplate.
Ned Deily

Questa risposta chiarisce perché non possiamo eseguire script python utilizzando la shell IDLE. Grazie @NedDeily
arsho

1
A partire da IDLE 3.7.4, ora puoi eseguire un modulo con argomenti. Usa il nuovo comando Run-> Run with Customized...(scorciatoia Maiusc + F5) e si aprirà un popup in cui puoi fornire i tuoi argomenti. Sfortunatamente al momento non li ricorda, quindi li incollerai ad ogni corsa.
Dan Nolan

6

Prova questo

import os
import subprocess

DIR = os.path.join('C:\\', 'Users', 'Sergey', 'Desktop', 'helloword.py')

subprocess.call(['python', DIR])

4

execFile('helloworld.py')fa il lavoro per me. Una cosa da notare è inserire il nome completo della directory del file .py se non è nella stessa cartella Python (almeno questo è il caso su Windows)

Per esempio, execFile('C:/helloworld.py')


4

MODO PIÙ FACILE

python -i helloworld.py  #Python 2

python3 -i helloworld.py #Python 3

2

Per esempio:

import subprocess

subprocess.call("C:\helloworld.py")

subprocess.call(["python", "-h"])

2
subprocess.call(r'c:\path\to\something.py')Non funziona per me. OSError: [WinError 193]% 1 non è un'applicazione Win32 valida
Terry Jan Reedy

Prova questo sottoprocesso di importazione del sistema operativo DIR = os.path.join ('C: \\', 'Users', 'Sergey', 'Desktop', 'a.py') subprocess.call (['python', DIR] )
Sergey Nosov

1

In Python 3, non c'è execFile. Si può usare la execfunzione incorporata, ad esempio:

import helloworld
exec('helloworld')

1

In IDLE, funziona quanto segue: -

import helloworld

Non so molto sul perché funzioni, ma lo fa ..


quello che stai facendo è caricare un modulo che non gira dalla shell. una differenza tra due è: 1) Caricamento del modulo nome del modulo nome __ = nome del file 2) esecuzione dal nome modulo shell _name __ = " _main "
tanweer alam

Non è un buon modo per eseguire programmi perché in realtà lo stai importando e non lo stai eseguendo. Il suo contenuto verrà importato e non avrà senso se non desideri utilizzarlo.
Abhijeet.py

1

Per eseguire uno script python in una shell python come Idle o in una shell Django è possibile eseguire le seguenti operazioni utilizzando la funzione exec (). Exec () esegue un argomento oggetto codice. Un oggetto codice in Python è semplicemente codice Python compilato. Quindi devi prima compilare il tuo file di script e poi eseguirlo usando exec (). Dal tuo guscio:

>>>file_to_compile = open('/path/to/your/file.py').read()
>>>code_object = compile(file_to_compile, '<string>', 'exec')
>>>exec(code_object)

Sto usando Python 3.4. Vedere i documenti di compilazione ed esecuzione per informazioni dettagliate.


1

L'ho testato e funziona:

exec(open('filename').read())  # Don't forget to put the filename between ' '

grazie per il suggerimento di citazione, questo ha funzionato per me. Votato.
Forever Learner

1

puoi farlo in due modi

  • import file_name

  • exec(open('file_name').read())

ma assicurati che il file sia archiviato dove è in esecuzione il tuo programma


0

In ambiente Windows, puoi eseguire il file py sulla riga di comando della shell Python3 con la seguente sintassi:

exec (open ('percorso assoluto a nome_file'). read ())

Di seguito viene spiegato come eseguire un semplice file helloworld.py dalla riga di comando della shell python

Posizione del file: C: /Users/testuser/testfolder/helloworld.py

Contenuto del file: stampa ("ciao mondo")

Possiamo eseguire questo file su Python3.7 Shell come di seguito:

>>> import os
>>> abs_path = 'C://Users/testuser/testfolder'
>>> os.chdir(abs_path)
>>> os.getcwd()
'C:\\Users\\testuser\\testfolder'

>>> exec(open("helloworld.py").read())
hello world

>>> exec(open("C:\\Users\\testuser\\testfolder\\helloworld.py").read())
hello world

>>> os.path.abspath("helloworld.py")
'C:\\Users\\testuser\\testfolder\\helloworld.py'
>>> import helloworld
hello world

importare un programma per eseguirlo non è una buona opzione. Anche io l'ho usato all'inizio ma ora so di potenziali problemi come se togliesse l'efficienza del tuo programma perché lo stai importando (anche se trascurabile).
Abhijeet.py

0

C'è un'altra alternativa (per Windows):

    import os
    os.system('py "<path of program with extension>"')

0

In una console Python, si possono provare i seguenti 2 modi.

nella stessa directory di lavoro,

1. >> importa helloworld

# se hai una variabile x , puoi stamparla in IDLE.

>> helloworld.x

# se hai una funzione func , puoi anche chiamarla in questo modo.

>> helloworld.func ()

2. >> runfile ("./ helloworld.py")

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.