Comment exécuter un script python à partir du shell interactif IDLE?

103

Comment exécuter un script python à partir du shell interactif IDLE?

Ce qui suit génère une erreur:

>>> python helloworld.py
SyntaxError: invalid syntax
tshepang
la source
A quoi ça helloworld.pyressemble?
TerryA
ouais cela signifie que quelque chose ne va pas avec votre code post youre code!
Série
12
Non pas forcément. Il y a de fortes chances que l'OP tape python helloworld.pydans une fenêtre shell IDLE et que cela ne fonctionne pas.
Ned Deily
Cela ne fonctionnerait pas non plus dans l'interpréteur standard. Ce problème est déjà survenu lorsque les gens pensent à tort que l'invite de l'interpréteur est une invite de ligne de commande.
Terry Jan Reedy
Vous devriez accepter la réponse de Ned Deily si cela répond correctement à votre question. Cela aidera également les autres développeurs à repérer rapidement la bonne réponse.
Krishna Oza

Réponses:

142

Python3 :

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

Si votre fichier n'est pas dans le même répertoire:

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

Voir https://stackoverflow.com/a/437857/739577 pour passer des variables globales / locales.


Dans les versions obsolètes de Python

Fonction intégrée Python2 : execfile

execfile('helloworld.py')

Il ne peut normalement pas être appelé avec des arguments. Mais voici une solution de contournement:

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

Obsolète depuis 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

Avec des arguments:

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

Utilisation avancée : sous - processus

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

Avec des arguments:

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

Lisez la documentation pour plus de détails :-)


Testé avec ce basique helloworld.py:

import sys
if len(sys.argv) > 1:
    print(sys.argv[1])
Hugues Fontenelle
la source
2
Pouvez-vous s'il vous plaît ajouter un exemple avec des arguments de ligne de commande également.
ViFI
1
Ne fonctionne pas avec Python3 et asker n'a pas spécifié la version de Python explicitement
Suncatcher
Ajouté execpour Python3
Hugues Fontenelle
35

Vous pouvez utiliser ceci dans python3:

exec(open(filename).read())
FacePalm
la source
24

La fenêtre du shell IDLE n'est pas la même chose qu'un shell de terminal (par exemple en cours d'exécution shou bash). C'est plutôt comme être dans l'interpréteur interactif Python ( python -i). Le moyen le plus simple d'exécuter un script dans IDLE est d'utiliser la Opencommande du Filemenu (cela peut varier un peu selon la plate-forme que vous exécutez) pour charger votre fichier de script dans une fenêtre d'éditeur IDLE, puis d'utiliser la commande Run-> Run Module(raccourci F5).

Ned Deily
la source
1
Mais vous ne pouvez pas passer d'arguments. :(
Erica Kane
3
Malheureusement, non, il n'est pas facile d'exécuter un fichier Python en IDLE tout en passant des arguments de ligne de commande. Il y a un problème ouvert de longue date pour IDLE pour le faire ( bugs.python.org/issue5680 ). Une solution de contournement pour les tests consiste à initialiser manuellement sys.argvau tout début du programme, par exemple, sous le passe- if __name__ == "__main__"partout habituel .
Ned Deily
Cette réponse clarifie pourquoi nous ne pouvons pas exécuter de script python en utilisant le shell IDLE. Merci @NedDeily
arsho
1
Depuis IDLE 3.7.4, vous pouvez maintenant exécuter un module avec des arguments. Utilisez la commande new Run-> Run with Customized...(raccourci Shift + F5) et une fenêtre contextuelle s'ouvrira où vous pourrez fournir vos arguments. Malheureusement, il ne les mémorise pas actuellement, vous les collerez donc à chaque exécution.
Dan Nolan
6

Essaye ça

import os
import subprocess

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

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

execFile('helloworld.py')fait le travail pour moi. Une chose à noter est de saisir le nom de répertoire complet du fichier .py s'il ne se trouve pas dans le dossier Python lui-même (au moins c'est le cas sous Windows)

Par exemple, execFile('C:/helloworld.py')

optimistic_kid
la source
4

LE PLUS FACILE

python -i helloworld.py  #Python 2

python3 -i helloworld.py #Python 3
Léonard
la source
2

Par exemple:

import subprocess

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

subprocess.call(["python", "-h"])
Sergey Nosov
la source
2
subprocess.call(r'c:\path\to\something.py')ne fonctionne pas pour moi. OSError: [WinError 193]% 1 n'est pas une application Win32 valide
Terry Jan Reedy
Essayez ce sous-processus d'importation d'os d'importation DIR = os.path.join ('C: \\', 'Users', 'Sergey', 'Desktop', 'a.py') subprocess.call (['python', DIR] )
Sergey Nosov
1

Dans Python 3, il n'y a pas de execFile. On peut utiliser une execfonction intégrée, par exemple:

import helloworld
exec('helloworld')
piogor
la source
1

En IDLE, les travaux suivants: -

import helloworld

Je ne sais pas trop pourquoi cela fonctionne, mais c'est le cas.

Aditya Dixit
la source
ce que vous faites est de charger un module qui ne fonctionne pas depuis le shell. une différence entre deux est: 1) Chargement du module nom de votre module nom __ = nom du fichier 2) exécution à partir du nom du module shell _name __ = " _main "
tanweer alam
Ce n'est pas une bonne façon d'exécuter des programmes car vous importez et ne l'exécutez pas. Son contenu sera importé et il n'aura aucun sens si vous ne voulez pas les utiliser.
Abhijeet.py
1

Pour exécuter un script python dans un shell python tel que Idle ou dans un shell Django, vous pouvez faire ce qui suit en utilisant la fonction exec (). Exec () exécute un argument d'objet code. Un objet de code en Python est simplement du code Python compilé. Vous devez donc d'abord compiler votre fichier de script, puis l'exécuter en utilisant exec (). Depuis votre shell:

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

J'utilise Python 3.4. Voir les documents de compilation et d' exécution pour des informations détaillées.

y2knoproblem
la source
1

J'ai testé ceci et ça marche un peu:

exec(open('filename').read())  # Don't forget to put the filename between ' '
Remache Amine
la source
merci pour le conseil de devis, cela a fonctionné pour moi. J'ai voté pour.
Forever Learner
1

vous pouvez le faire de deux manières

  • import file_name

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

mais assurez-vous que ce fichier doit être stocké là où votre programme est en cours d'exécution

ujjal das
la source
0

Sur l'environnement Windows, vous pouvez exécuter le fichier py sur la ligne de commande du shell Python3 avec la syntaxe suivante:

exec (open ('chemin absolu vers nom_fichier'). read ())

Ci-dessous explique comment exécuter un simple fichier helloworld.py à partir de la ligne de commande du shell python

Emplacement du fichier: C: /Users/testuser/testfolder/helloworld.py

Contenu du fichier: impression ("bonjour le monde")

Nous pouvons exécuter ce fichier sur Python3.7 Shell comme ci-dessous:

>>> 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
la source
importer un programme pour l'exécuter n'est pas une bonne option. Même moi, je l'ai utilisé au début, mais maintenant je connais des problèmes potentiels comme cela enlève l'efficacité de votre programme parce que vous l'importez (bien que négligeable).
Abhijeet.py
0

Il existe une autre alternative (pour Windows) -

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

Dans une console python, on peut essayer les 2 façons suivantes.

sous le même répertoire de travail,

1. >> importer helloworld

# si vous avez une variable x , vous pouvez l'imprimer en IDLE.

>> helloworld.x

# si vous avez une fonction func , vous pouvez également l'appeler comme ceci.

>> helloworld.func ()

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

LynnSunshine
la source