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

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])

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())

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).


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])

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')


4

EINFACHSTER WEG

python -i helloworld.py  #Python 2

python3 -i helloworld.py #Python 3

2

Beispielsweise:

import subprocess

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

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

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')

1

In IDLE funktioniert Folgendes: -

import helloworld

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


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.


1

Ich habe das getestet und es klappt irgendwie:

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

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


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

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>"')

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")

Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.