Hoe voer je een bestand uit in de Python-interpreter?

Ik probeer een bestand uit te voeren met Python-commando’s vanuit de interpreter.

EDIT: ik probeer variabelen en instellingen uit dat bestand te gebruiken, niet om een apart proces aan te roepen.


Antwoord 1, autoriteit 100%

Verschillende manieren.

Vanuit de schelp

python someFile.py

Klik vanuit IDLE op F5.

Als je interactief typt, probeer dan dit: (Alleen Python 2!)

>>> variables= {}
>>> execfile( "someFile.py", variables )
>>> print variables # globals from the someFile module

Voor Python3, gebruik:

>>> exec(open("filename.py").read())

Antwoord 2, autoriteit 98%

Voor Python 2:

>>> execfile('filename.py')

Voor Python 3:

>>> exec(open("filename.py").read())
# or
>>> from pathlib import Path
>>> exec(Path("filename.py").read_text())

Zie de documentatie. Als je Python 3.0 gebruikt, bekijk dan deze vraag.

Zie het antwoord van @S.Lott voor een voorbeeld van hoe u toegang krijgt tot globals vanuit filename.py nadat u het hebt uitgevoerd.


Antwoord 3, autoriteit 39%

Python 2 + Python 3

exec(open("./path/to/script.py").read(), globals())

Hiermee wordt een script uitgevoerd en worden alle globale variabelen in het globale bereik van de interpreter geplaatst (het normale gedrag in de meeste scriptomgevingen).

Python 3 exec-documentatie


Antwoord 4, autoriteit 22%

Verbaasd dat ik dit nog niet heb gezien. U kunt een bestand uitvoeren en vervolgens de interpreter open laten nadat de uitvoering is beëindigd met de optie -i:

| foo.py |
----------
testvar = 10
def bar(bing):
  return bing*3
--------
$ python -i foo.py
>>> testvar 
10
>>> bar(6)
18

Antwoord 5, autoriteit 11%

Ik probeer variabelen en instellingen uit dat bestand te gebruiken, niet om een apart proces aan te roepen.

Nou, door simpelweg het bestand te importeren met import filename(minus .py, moet in dezelfde map staan of op uw PYTHONPATH) wordt het bestand uitgevoerd, waardoor het variabelen, functies, klassen, etc. beschikbaar in de filename.variablenaamruimte.

Dus als je cheddar.pyhebt met de variabele spam en de functie eggs – je kunt ze importeren met import cheddar, ga dan naar de variabele met cheddar.spamen voer de functie uit door cheddar.eggs()

. aan te roepen

Als je code in cheddar.pyhebt die buiten een functie valt, wordt deze onmiddellijk uitgevoerd, maar het bouwen van applicaties die dingen uitvoeren bij het importeren, zal het moeilijk maken om je code opnieuw te gebruiken. Als alles mogelijk is, plaats dan alles in functies of klassen.


Antwoord 6, autoriteit 6%

Naar mijn mening is de beste manier:

import yourfile

en na het wijzigen van uwbestand.py

reload(yourfile)   

of

import imp; 
imp.reload(yourfile) in python3

maar hierdoor zien de functie en klassen er zo uit:
uwbestand.functie1, uwbestand.klasse1…..

Als u deze niet kunt accepteren,
de uiteindelijke oplossing is:

reload(yourfile)
from yourfile import *

Antwoord 7, autoriteit 4%

Gewoon doen,

from my_file import *

Zorg ervoor dat u geen .py-extensie toevoegt. Als uw .py-bestand in de submap wordt gebruikt,

from my_dir.my_file import *

Antwoord 8, autoriteit 3%

Ik ben geen expert, maar dit is wat mij is opgevallen:

als je code bijvoorbeeld mycode.py is, en je typt gewoon ‘import mycode’, dan zal Python het uitvoeren, maar het zal niet al je variabelen beschikbaar maken voor de interpreter. Ik ontdekte dat je eigenlijk ‘from mycode import *’ moet typen als je alle variabelen beschikbaar wilt maken voor de interpreter.


Antwoord 9, autoriteit 3%

Voor Python 3:

>>> exec(open("helloworld.py").read())

Zorg ervoor dat u zich in de juiste map bevindt voordat u de opdracht uitvoert.

Om een bestand uit een andere map uit te voeren, kunt u het onderstaande commando gebruiken:

with open ("C:\\Users\\UserName\\SomeFolder\\helloworld.py", "r") as file:
    exec(file.read())

Antwoord 10, autoriteit 3%

Gebruik voor python3 ofwel met xxxx = nameof yourfile.

exec(open('./xxxx.py').read())

Antwoord 11

Stel dat u de volgende functies wenst:

  1. Bronbestand gedraagt zich correct in uw debugger (bestandsnaam wordt weergegeven in stapel, enz.)
  2. __name__ == '__main__'is True, dus scripts gedragen zich correct als scripts.

De exec(open('foo.py').read())faalt in functie 1
De import foo-strategie faalt in functie 2

Om beide te krijgen, heb je dit nodig:

   source = open(filename).read()
    code = compile(source, filename, 'exec')
    exec(code)

Antwoord 12

python -c "exec(open('main.py').read())"

Other episodes