Wie führe ich ein Python-Skript über die interaktive IDLE-Shell aus?

102

Wie führe ich ein Python-Skript in der interaktiven IDLE-Shell aus?

Folgendes wirft einen Fehler aus:

>>> python helloworld.py
SyntaxError: invalid syntax
Tshepang
quelle
Wie sieht es helloworld.pyaus?
TerryA
Ja, es bedeutet, dass etwas mit deinem Code nicht stimmt. Poste deinen Code!
Serien
12
Nein, nicht unbedingt. Möglicherweise gibt das OP python helloworld.pyein IDLE-Shell-Fenster ein und das funktioniert nicht.
Ned Deily
Es würde auch nicht im Standardinterpreter funktionieren. Dieses Problem ist bereits aufgetreten, als fälschlicherweise angenommen wurde, dass die Interpreter-Eingabeaufforderung eine Befehlszeilen-Eingabeaufforderung ist.
Terry Jan Reedy
Sie sollten die Antwort von Ned Deily akzeptieren, wenn diese Ihre Frage richtig beantwortet. Dies hilft auch anderen Entwicklern, schnell die richtige Antwort zu finden.
Krishna Oza

Antworten:

141

Python3 :

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

Wenn sich Ihre Datei nicht im selben Verzeichnis befindet:

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

Informationen zum Übergeben globaler / lokaler Variablen finden Sie unter https://stackoverflow.com/a/437857/739577 .


In veralteten Python-Versionen

Python2 Integrierte Funktion: execfile

execfile('helloworld.py')

Es kann normalerweise nicht mit Argumenten aufgerufen werden. Aber hier ist eine Problemumgehung:

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

Veraltet seit 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

Mit Argumenten:

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

Vorabverwendung: Unterprozess

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

Mit Argumenten:

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

Lesen Sie die Dokumente für Details :-)


Getestet mit diesem Basic helloworld.py:

import sys
if len(sys.argv) > 1:
    print(sys.argv[1])
Hugues Fontenelle
quelle
2
Können Sie bitte auch ein Beispiel mit Befehlszeilenargumenten hinzufügen?
ViFI
1
Funktioniert nicht mit Python3 und der Fragesteller hat die Python-Version nicht explizit angegeben
Suncatcher
Hinzugefügt execfür Python3
Hugues Fontenelle
35

Sie können dies in Python3 verwenden:

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

Das IDLE-Shell-Fenster ist nicht dasselbe wie eine Terminal-Shell (z . B. running shoder bash). Es ist eher so, als wäre man im interaktiven Python-Interpreter ( python -i). Der einfachste Weg, ein Skript in IDLE auszuführen, besteht darin, den OpenBefehl aus dem FileMenü zu verwenden (dies kann je nach der von Ihnen ausgeführten Plattform etwas variieren), um Ihre Skriptdatei in ein IDLE-Editorfenster zu laden und dann den Befehl Run-> Run Module(Verknüpfung) zu verwenden F5).

Ned Deily
quelle
1
Aber Sie können keine Argumente weitergeben. :(
Erica Kane
3
Leider ist es nicht einfach, eine Python-Datei in IDLE auszuführen, während Befehlszeilenargumente übergeben werden. Es gibt ein seit langem offenes Problem für IDLE ( bugs.python.org/issue5680 ). Eine Problemumgehung für das Testen besteht darin, zu sys.argvBeginn des Programms manuell zu initialisieren , z. B. unter der üblichen if __name__ == "__main__"Boilerplate.
Ned Deily
Diese Antwort verdeutlicht, warum wir kein Python-Skript mit der IDLE-Shell ausführen können. Danke @NedDeily
arsho
1
Ab IDLE 3.7.4 können Sie jetzt ein Modul mit Argumenten ausführen. Verwenden Sie den neuen Befehl Run-> Run with Customized...(Tastenkombination Umschalt + F5). Ein Popup wird geöffnet, in dem Sie Ihre Argumente angeben können. Leider werden sie derzeit nicht gespeichert, sodass Sie sie bei jedem Lauf einfügen.
Dan Nolan
6

Versuche dies

import os
import subprocess

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

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

execFile('helloworld.py')macht den Job für mich. Beachten Sie, dass Sie den vollständigen Verzeichnisnamen der .py-Datei eingeben müssen, wenn diese nicht im Python-Ordner selbst enthalten ist (zumindest unter Windows).

Beispielsweise, execFile('C:/helloworld.py')

optimistic_kid
quelle
4

EINFACHSTER WEG

python -i helloworld.py  #Python 2

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

Beispielsweise:

import subprocess

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

subprocess.call(["python", "-h"])
Sergey Nosov
quelle
2
subprocess.call(r'c:\path\to\something.py')funktioniert bei mir nicht OSError: [WinError 193]% 1 ist keine gültige Win32-Anwendung
Terry Jan Reedy
Versuchen Sie diesen Import oder Import-Unterprozess DIR = os.path.join ('C: \\', 'Benutzer', 'Sergey', 'Desktop', 'a.py') subprocess.call (['Python', DIR] )
Sergey Nosov
1

In Python 3 gibt es keine execFile. Man kann die execeingebaute Funktion verwenden, zum Beispiel:

import helloworld
exec('helloworld')
piogor
quelle
1

In IDLE funktioniert Folgendes: -

import helloworld

Ich weiß nicht viel darüber, warum es funktioniert, aber es funktioniert ..

Aditya Dixit
quelle
Sie laden ein Modul, das nicht über die Shell ausgeführt wird. Ein Unterschied zwischen zwei ist: 1) Laden des Moduls Ihr Modulname Name __ = Name der Datei 2) Ausführen von Shell- Modulname _name __ = " _main "
Tanweer Alam
Es ist keine gute Möglichkeit, Programme auszuführen, da Sie sie tatsächlich importieren und nicht ausführen. Der Inhalt wird importiert und ist bedeutungslos, wenn Sie ihn nicht verwenden möchten.
Abhijeet.py
1

Um ein Python-Skript in einer Python-Shell wie Idle oder in einer Django-Shell auszuführen, können Sie mit der Funktion exec () Folgendes tun. Exec () führt ein Codeobjektargument aus. Ein Codeobjekt in Python ist einfach kompilierter Python-Code. Sie müssen also zuerst Ihre Skriptdatei kompilieren und dann mit exec () ausführen. Aus deiner Muschel:

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

Ich benutze Python 3.4. Ausführliche Informationen finden Sie in den Kompilierungs- und Exec- Dokumenten.

y2knoproblem
quelle
1

Ich habe das getestet und es klappt irgendwie:

exec(open('filename').read())  # Don't forget to put the filename between ' '
Remache Amine
quelle
danke für den zitiertipp, das hat bei mir funktioniert. Upvoted.
Für immer Lernende
1

Sie können es auf zwei Arten tun

  • import file_name

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

Stellen Sie jedoch sicher, dass die Datei dort gespeichert wird, wo Ihr Programm ausgeführt wird

ujjal das
quelle
0

In einer Windows-Umgebung können Sie py-Dateien in der Python3-Shell-Befehlszeile mit der folgenden Syntax ausführen:

exec (open ('absoluter Pfad zu Dateiname'). read ())

Im Folgenden wird erläutert, wie Sie eine einfache Datei helloworld.py über die Befehlszeile der Python-Shell ausführen

Dateispeicherort: C: /Users/testuser/testfolder/helloworld.py

Dateiinhalt: Drucken ("Hallo Welt")

Wir können diese Datei auf der Python3.7-Shell wie folgt ausführen:

>>> 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
quelle
Das Importieren eines Programms zum Ausführen ist keine gute Option. Sogar ich habe es am Anfang verwendet, aber jetzt weiß ich über mögliche Probleme Bescheid, da es die Effizienz Ihres Programms beeinträchtigt, weil Sie es importieren (obwohl vernachlässigbar).
Abhijeet.py
0

Es gibt noch eine Alternative (für Windows) -

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

In einer Python-Konsole können Sie die folgenden zwei Möglichkeiten ausprobieren.

unter dem gleichen Arbeitsverzeichnis,

1. >> helloworld importieren

# Wenn Sie eine Variable x haben , können Sie diese im IDLE drucken.

>> helloworld.x

# , Wenn Sie eine Funktion func , können Sie auch es so nennen.

>> helloworld.func ()

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

LynnSunshine
quelle