Jak uruchomić skrypt Pythona z interaktywnej powłoki IDLE?

103

Jak uruchomić skrypt w języku Python z poziomu powłoki interaktywnej IDLE?

Poniższe zgłasza błąd:

>>> python helloworld.py
SyntaxError: invalid syntax
tshepang
źródło
Jak helloworld.pywygląda?
TerryA
tak, to znaczy, że coś jest nie tak z Twoim kodem!
Serial
12
Nie, niekoniecznie. Prawdopodobnie OP pisze python helloworld.pyw oknie powłoki IDLE i to nie działa.
Ned Deily
Nie zadziała też w standardowym tłumaczu. Ten problem pojawił się wcześniej, gdy ludzie błędnie myślą, że zachęta interpretera jest monitem wiersza poleceń.
Terry Jan Reedy
Powinieneś zaakceptować odpowiedź od Neda Deily, jeśli to poprawnie odpowie na twoje pytanie. Pomoże to również innym programistom szybko znaleźć poprawną odpowiedź.
Krishna Oza

Odpowiedzi:

142

Python3 :

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

Jeśli twój plik nie znajduje się w tym samym katalogu:

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

Zobacz https://stackoverflow.com/a/437857/739577, aby uzyskać informacje o przekazywaniu zmiennych globalnych / lokalnych.


W przestarzałych wersjach Pythona

Python2 Wbudowana funkcja: plik wykonywalny

execfile('helloworld.py')

Zwykle nie można go wywołać z argumentami. Ale oto obejście:

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

Przestarzałe od wersji 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

Z argumentami:

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

Użycie zaawansowane: podproces

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

Z argumentami:

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

Przeczytaj dokumentację, aby uzyskać szczegółowe informacje :-)


Przetestowane z tym podstawowym helloworld.py:

import sys
if len(sys.argv) > 1:
    print(sys.argv[1])
Hugues Fontenelle
źródło
2
Czy możesz dodać przykład z argumentami wiersza poleceń.
ViFI
1
Nie działa z Python3, a asker nie określił jawnie wersji Pythona
Suncatcher
Dodano execdla Python3
Hugues Fontenelle
35

Możesz tego użyć w python3:

exec(open(filename).read())
FacePalm
źródło
24

Okno powłoki IDLE nie jest tym samym, co powłoka terminala (np. Działa shlub bash). Jest to raczej podobne do przebywania w interaktywnym interpreterze języka Python ( python -i). Najłatwiejszym sposobem uruchomienia skryptu w IDLE jest użycie Openpolecenia z Filemenu (może się to nieco różnić w zależności od używanej platformy), aby załadować plik skryptu do okna edytora IDLE, a następnie użyć polecenia Run-> Run Module(skrót F5).

Ned Deily
źródło
1
Ale nie możesz przekazać argumentów. :(
Erica Kane
3
Niestety nie, nie jest łatwo uruchomić plik Pythona w IDLE podczas przekazywania argumentów wiersza poleceń. W IDLE istnieje od dawna otwarty problem ( bugs.python.org/issue5680 ). Jedynym obejściem testowania jest ręczna inicjalizacja sys.argvna samym początku programu, na przykład pod zwykłym if __name__ == "__main__"szablonem.
Ned Deily,
Ta odpowiedź wyjaśnia, dlaczego nie możemy uruchomić skryptu Pythona przy użyciu powłoki IDLE. Dzięki @ NedDeily
arsho
1
Począwszy od IDLE 3.7.4, możesz teraz uruchomić moduł z argumentami. Użyj nowego Run-> Run with Customized...polecenia (skrót Shift + F5), a otworzy się wyskakujące okienko, w którym możesz podać swoje argumenty. Niestety obecnie ich nie pamięta, więc będziesz je wklejać przy każdym uruchomieniu.
Dan Nolan
6

Spróbuj tego

import os
import subprocess

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

subprocess.call(['python', DIR])
Sergey Nosov
źródło
4

execFile('helloworld.py')wykonuje pracę za mnie. Należy zwrócić uwagę, aby wprowadzić pełną nazwę katalogu pliku .py, jeśli nie ma go w samym folderze Pythona (przynajmniej w przypadku systemu Windows)

Na przykład, execFile('C:/helloworld.py')

optimistic_kid
źródło
4

NAJPROSTSZY SPOSÓB

python -i helloworld.py  #Python 2

python3 -i helloworld.py #Python 3
Leonard
źródło
2

Na przykład:

import subprocess

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

subprocess.call(["python", "-h"])
Sergey Nosov
źródło
2
subprocess.call(r'c:\path\to\something.py')nie działa dla mnie. OSError: [WinError 193]% 1 nie jest poprawną aplikacją Win32
Terry Jan Reedy
Spróbuj tego importu os import subprocess DIR = os.path.join ('C: \\', 'Users', 'Sergey', 'Desktop', 'a.py') subprocess.call (['python', DIR] )
Sergey Nosov
1

W Pythonie 3 nie ma execFile. Można skorzystać execz funkcji wbudowanej, na przykład:

import helloworld
exec('helloworld')
piogor
źródło
1

W IDLE działa: -

import helloworld

Nie wiem zbyt wiele o tym, dlaczego to działa, ale działa ...

Aditya Dixit
źródło
to, co robisz, to ładowanie modułu, który nie jest uruchomiony z powłoki. jedna różnica między dwoma to: 1) Ładowanie modułu nazwa modułu nazwa __ = nazwa pliku 2) uruchamianie z poziomu nazwy modułu powłoki _name __ = " _main "
tanweer alam
Uruchamianie programów nie jest dobrym sposobem, ponieważ faktycznie je importujesz, a nie uruchamiasz. Jego zawartość zostanie zaimportowana i będzie bez znaczenia, jeśli nie chcesz ich używać.
Abhijeet.py
1

Aby uruchomić skrypt Pythona w powłoce Pythona, takiej jak Idle lub w powłoce Django, możesz wykonać następujące czynności za pomocą funkcji exec (). Funkcja Exec () wykonuje argument obiektu kodu. Obiekt kodu w Pythonie to po prostu skompilowany kod w Pythonie. Musisz więc najpierw skompilować plik skryptu, a następnie wykonać go za pomocą exec (). Z Twojej powłoki:

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

Używam Pythona 3.4. Zobacz kompilacji i exec dokumenty w celu uzyskania szczegółowych informacji.

y2knoproblem
źródło
1

Przetestowałem to i to trochę działa:

exec(open('filename').read())  # Don't forget to put the filename between ' '
Remache Amine
źródło
dzięki za wskazówkę do wyceny, to zadziałało dla mnie. Głosowano za.
Forever Learner
1

możesz to zrobić na dwa sposoby

  • import file_name

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

ale upewnij się, że plik powinien być przechowywany tam, gdzie działa twój program

ujjal das
źródło
0

W środowisku Windows można uruchomić plik py w wierszu poleceń powłoki Python3 z następującą składnią:

exec (open ('bezwzględna ścieżka do nazwa_pliku'). read ())

Poniżej wyjaśniono, jak wykonać prosty plik helloworld.py z wiersza poleceń powłoki Pythona

Lokalizacja pliku: C: /Users/testuser/testfolder/helloworld.py

Zawartość pliku: print ("witaj świecie")

Możemy uruchomić ten plik na powłoce Python3.7 jak poniżej:

>>> 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
źródło
importowanie programu w celu jego uruchomienia nie jest dobrą opcją. Nawet ja używałem go na początku, ale teraz wiem o potencjalnych problemach, takich jak odbieranie wydajności twojego programu, ponieważ go importujesz (choć nieistotne).
Abhijeet.py
0

Jest jeszcze jedna alternatywa (dla Windows) -

    import os
    os.system('py "<path of program with extension>"')
Abhijeet.py
źródło
0

W konsoli Pythona można wypróbować dwa sposoby.

w tym samym katalogu roboczym,

1. >> import helloworld

# jeśli masz zmienną x , możesz wydrukować ją w IDLE.

>> helloworld.x

# jeśli masz funkcję func , możesz ją również nazwać w ten sposób.

>> helloworld.func ()

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

LynnSunshine
źródło