Estou tentando executar um arquivo com comandos python de dentro do intérprete.
Edição: Estou tentando usar variáveis e configurações desse arquivo, para não invocar um processo separado.
Estou tentando executar um arquivo com comandos python de dentro do intérprete.
Edição: Estou tentando usar variáveis e configurações desse arquivo, para não invocar um processo separado.
Respostas:
Várias formas.
Da casca
python someFile.py
De dentro do IDLE, pressione F5 .
Se você estiver digitando de forma interativa, tente o seguinte: ( somente Python 2 !)
>>> variables= {}
>>> execfile( "someFile.py", variables )
>>> print variables # globals from the someFile module
Para Python3 , use:
>>> exec(open("filename.py").read())
python
não funciona se você estiver executando o python 3, python3
é usado.
stdin
de um arquivo como usar <
para o script em execução no execfile()
. @ s-lott
python
aponta python3
.
python
executável que o sistema encontra ao examinar as pastas na variável de ambiente PATH
.
Para Python 2:
>>> execfile('filename.py')
Para Python 3:
>>> exec(open("filename.py").read())
# or
>>> from pathlib import Path
>>> exec(Path("filename.py").read_text())
Veja a documentação . Se você estiver usando o Python 3.0, consulte esta pergunta .
Veja a resposta de @ S.Lott para obter um exemplo de como você acessa globais de filename.py após executá-lo.
exec(open("./path/to/script.py").read(), globals())
Isso executará um script e colocará todas as suas variáveis globais no escopo global do intérprete (o comportamento normal na maioria dos ambientes de script).
open
lê diretamente o código do script. Para passar argumentos, observe esta resposta , mas em vez de execfile
, obviamente, use exec
e open
como mostrado acima.
Surpreso, ainda não vi isso. Você pode executar um arquivo e deixar o intérprete aberto após o término da execução, usando a -i
opção:
| foo.py |
----------
testvar = 10
def bar(bing):
return bing*3
--------
$ python -i foo.py
>>> testvar
10
>>> bar(6)
18
Estou tentando usar variáveis e configurações desse arquivo, para não invocar um processo separado.
Bem, simplesmente importar o arquivo com import filename
(menos .py, precisa estar no mesmo diretório ou no seu PYTHONPATH
) executará o arquivo, disponibilizando suas variáveis, funções, classes, etc. no filename.variable
espaço para nome.
Portanto, se você possui cheddar.py
a variável spam e a função eggs - você pode importá-la import cheddar
, acessar a variável with cheddar.spam
e executar a função chamandocheddar.eggs()
Se você tiver um código cheddar.py
fora da função, ele será executado imediatamente, mas a criação de aplicativos que executam coisas na importação dificultará a reutilização do código. Se possível, coloque tudo dentro de funções ou classes.
from filename import *
Do meu ponto de vista, a melhor maneira é:
import yourfile
e depois de modificar o seu arquivo.py
reload(yourfile)
ou
import imp;
imp.reload(yourfile) in python3
mas isso fará com que a função e as classes sejam assim: yourfile.function1, yourfile.class1 .....
Se você não pode aceitá-las, a solução finalmente é:
reload(yourfile)
from yourfile import *
Não sou especialista, mas foi o que notei:
se o seu código for mycode.py, por exemplo, e você digitar apenas 'import mycode', o Python o executará, mas não disponibilizará todas as suas variáveis para o intérprete. Descobri que você deve digitar realmente 'from mycode import *' se quiser disponibilizar todas as variáveis para o intérprete.
Apenas faça,
from my_file import *
Certifique-se de não adicionar a extensão .py. Se o seu arquivo .py no subdiretório usar,
from my_dir.my_file import *
Para Python 3:
>>> exec(open("helloworld.py").read())
Verifique se você está no diretório correto antes de executar o comando.
Para executar um arquivo de um diretório diferente, você pode usar o comando abaixo:
with open ("C:\\Users\\UserName\\SomeFolder\\helloworld.py", "r") as file:
exec(file.read())
Supondo que você deseje os seguintes recursos:
__name__ == '__main__'
é True para que os scripts se comportem corretamente como scripts.O exec(open('foo.py').read())
recurso de falha 1 A import foo
estratégia de falha recurso 2
Para obter os dois, você precisa do seguinte:
source = open(filename).read()
code = compile(source, filename, 'exec')
exec(code)