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.