¿Cómo ejecutar un script de Python desde el shell interactivo IDLE?

102

¿Cómo ejecuto un script de Python desde el shell interactivo IDLE?

Lo siguiente arroja un error:

>>> python helloworld.py
SyntaxError: invalid syntax
tshepang
fuente
¿Qué helloworld.pyaspecto tiene ?
TerryA
Sí, significa que algo anda mal con tu código, publica tu código.
Serie
12
No, no necesariamente. Lo más probable es que el OP esté escribiendo python helloworld.pyen una ventana de shell IDLE y eso no funcione.
Ned Deily
Tampoco funcionaría en el intérprete estándar. Este problema ha surgido antes donde la gente piensa erróneamente que el indicador del intérprete es un indicador de línea de comandos.
Terry Jan Reedy
Debe aceptar la respuesta de Ned Deily si responde correctamente a su pregunta. Esto también ayudará a otros desarrolladores a detectar rápidamente la respuesta correcta.
Krishna Oza

Respuestas:

141

Python3 :

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

Si su archivo no está en el mismo directorio:

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

Consulte https://stackoverflow.com/a/437857/739577 para pasar variables globales / locales.


En versiones obsoletas de Python

Función incorporada de Python2 : execfile

execfile('helloworld.py')

Normalmente no se puede llamar con argumentos. Pero aquí hay una solución:

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

En desuso desde 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 argumentos:

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

Uso avanzado: subproceso

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

Con argumentos:

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

Lea los documentos para obtener más detalles :-)


Probado con este básico helloworld.py:

import sys
if len(sys.argv) > 1:
    print(sys.argv[1])
Hugues Fontenelle
fuente
2
¿Puede agregar un ejemplo con argumentos de línea de comando también?
ViFI
1
No funciona con Python3 y el autor de la pregunta no especificó la versión de Python explícitamente
Suncatcher
Agregado execpara Python3
Hugues Fontenelle
35

Puedes usar esto en python3:

exec(open(filename).read())
FacePalm
fuente
24

La ventana del shell IDLE no es lo mismo que un shell terminal (por ejemplo, en ejecución sho bash). Más bien, es como estar en el intérprete interactivo de Python ( python -i). La forma más fácil de ejecutar un script en IDLE es usar el Opencomando del Filemenú (esto puede variar un poco según la plataforma que esté ejecutando) para cargar su archivo de script en una ventana del editor IDLE y luego usar el comando Run-> Run Module(acceso directo F5).

Ned Deily
fuente
1
Pero no puedes pasar argumentos. :(
Erica Kane
3
Desafortunadamente, no, no es fácil ejecutar un archivo Python en IDLE mientras se pasan argumentos en la línea de comandos. Hay un problema abierto desde hace mucho tiempo para que IDLE lo haga ( bugs.python.org/issue5680 ). Una solución alternativa para las pruebas es inicializar manualmente sys.argval principio del programa, por ejemplo, en el if __name__ == "__main__"modelo habitual .
Ned Deily
Esta respuesta aclara por qué no podemos ejecutar un script de Python usando el shell IDLE. Gracias @NedDeily
arsho
1
A partir de IDLE 3.7.4, ahora puede ejecutar un módulo con argumentos. Use el nuevo comando Run-> Run with Customized...(atajo Shift + F5) y se abrirá una ventana emergente donde podrá proporcionar sus argumentos. Desafortunadamente, no los recuerda actualmente, por lo que los pegará con cada ejecución.
Dan Nolan
6

Prueba esto

import os
import subprocess

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

subprocess.call(['python', DIR])
Sergey Nosov
fuente
4

execFile('helloworld.py')hace el trabajo por mí. Una cosa a tener en cuenta es ingresar el nombre completo del directorio del archivo .py si no está en la carpeta de Python (al menos este es el caso en Windows)

Por ejemplo, execFile('C:/helloworld.py')

niño_ optimista
fuente
4

LA MANERA MÁS FÁCIL

python -i helloworld.py  #Python 2

python3 -i helloworld.py #Python 3
Leonard
fuente
2

Por ejemplo:

import subprocess

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

subprocess.call(["python", "-h"])
Sergey Nosov
fuente
2
subprocess.call(r'c:\path\to\something.py')no funciona para mi. OSError: [WinError 193]% 1 no es una aplicación Win32 válida
Terry Jan Reedy
Pruebe este subproceso de importación del sistema operativo DIR = os.path.join ('C: \\', 'Usuarios', 'Sergey', 'Escritorio', 'a.py') subprocess.call (['python', DIR] )
Sergey Nosov
1

En Python 3, no hay execFile. Uno puede usar la execfunción incorporada, por ejemplo:

import helloworld
exec('helloworld')
piogor
fuente
1

En IDLE, funciona lo siguiente: -

import helloworld

No sé mucho sobre por qué funciona, pero funciona ...

Aditya Dixit
fuente
lo que está haciendo es cargar un módulo que no se ejecuta desde el shell. una diferencia entre dos es: 1) Cargando módulo el nombre de su módulo nombre __ = nombre del archivo 2) ejecutar desde el nombre del módulo shell _name __ = " _main "
tanweer alam
No es una buena forma de ejecutar programas porque en realidad los está importando y no los está ejecutando. Su contenido se importará y no tendrá sentido si no desea utilizarlo.
Abhijeet.py
1

Para ejecutar un script de Python en un shell de Python como Idle o en un shell de Django, puede hacer lo siguiente usando la función exec (). Exec () ejecuta un argumento de objeto de código. Un objeto de código en Python es simplemente código Python compilado. Por lo tanto, primero debe compilar su archivo de script y luego ejecutarlo usando exec (). De tu caparazón:

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

Estoy usando Python 3.4. Consulte los documentos de compilación y ejecución para obtener información detallada.

y2knoproblem
fuente
1

Probé esto y funciona un poco:

exec(open('filename').read())  # Don't forget to put the filename between ' '
Remache Amine
fuente
gracias por el consejo de cotización, esto funcionó para mí. Voto a favor.
Forever Learner
1

puedes hacerlo de dos maneras

  • import file_name

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

pero asegúrese de que el archivo debe almacenarse donde se ejecuta su programa

ujjal das
fuente
0

En el entorno Windows, puede ejecutar el archivo py en la línea de comandos del shell Python3 con la siguiente sintaxis:

exec (open ('ruta absoluta al nombre_archivo'). read ())

A continuación se explica cómo ejecutar un archivo helloworld.py simple desde la línea de comandos del shell de Python

Ubicación del archivo: C: /Users/testuser/testfolder/helloworld.py

Contenido del archivo: imprimir ("hola mundo")

Podemos ejecutar este archivo en Python3.7 Shell de la siguiente manera:

>>> 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
vinsinraw
fuente
importar un programa para ejecutarlo no es una buena opción. Incluso lo usé al principio, pero ahora conozco problemas potenciales, como que quita la eficiencia de su programa porque lo está importando (aunque insignificante).
Abhijeet.py
0

Hay una alternativa más (para Windows):

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

En una consola de Python, uno puede probar las siguientes 2 formas.

bajo el mismo directorio de trabajo,

1. >> importar helloworld

# si tiene una variable x , puede imprimirla en IDLE.

>> helloworld.x

# si tiene una función func , también puede llamarla así.

>> helloworld.func ()

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

LynnSunshine
fuente