Como executar um script python a partir do shell interativo IDLE?

102

Como executo um script Python de dentro do shell interativo IDLE?

O seguinte gera um erro:

>>> python helloworld.py
SyntaxError: invalid syntax
tshepang
fonte
O que helloworld.pyparece?
TerryA de
sim, isso significa que algo está errado com seu código, postar seu código!
Série de
12
Não, não necessariamente. Provavelmente, o OP está digitando python helloworld.pyem uma janela de shell IDLE e isso não funciona.
Ned Deily
Nem funcionaria no intérprete padrão. Este problema surgiu antes, onde as pessoas erroneamente pensam que o prompt do interpretador é um prompt de linha de comando.
Terry Jan Reedy de
Você deve aceitar a resposta de Ned Deily se esta responder sua pergunta corretamente. Isso também ajudará outros desenvolvedores a localizar rapidamente a resposta correta.
Krishna Oza

Respostas:

141

Python3 :

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

Se o seu arquivo não estiver no mesmo diretório:

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

Consulte https://stackoverflow.com/a/437857/739577 para passar variáveis ​​globais / locais.


Em versões obsoletas do Python

Função integrada do Python2 : execfile

execfile('helloworld.py')

Normalmente não pode ser chamado com argumentos. Mas aqui está uma solução alternativa:

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

Obsoleto desde 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

Com argumentos:

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

Uso avançado: subprocesso

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

Com argumentos:

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

Leia os documentos para obter detalhes :-)


Testado com este básico helloworld.py:

import sys
if len(sys.argv) > 1:
    print(sys.argv[1])
Hugues Fontenelle
fonte
2
Você pode adicionar um exemplo com argumentos de linha de comando também.
ViFI
1
Não funciona com Python3 e o asker não especificou a versão do Python explicitamente
Suncatcher
Adicionado execpara Python3
Hugues Fontenelle
35

Você pode usar isso em python3:

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

A janela do shell IDLE não é o mesmo que um shell de terminal (por exemplo, executando shou bash). Em vez disso, é como estar no interpretador interativo Python ( python -i). A maneira mais fácil de executar um script no IDLE é usar o Opencomando do Filemenu (pode variar um pouco dependendo da plataforma que você está executando) para carregar seu arquivo de script em uma janela do editor IDLE e então usar o comando Run-> Run Module(atalho F5).

Ned Deily
fonte
1
Mas você não pode passar argumentos. :(
Erica Kane,
3
Infelizmente, não, não é fácil executar um arquivo Python no IDLE ao passar argumentos de linha de comando. Há um antigo problema aberto para o IDLE fazer isso ( bugs.python.org/issue5680 ). Uma solução alternativa para o teste é inicializar manualmente sys.argvno início do programa, por exemplo, sob o if __name__ == "__main__"boilerplate usual .
Ned Deily
Esta resposta esclarece porque não podemos executar o script Python usando o shell IDLE. Obrigado @NedDeily
arsho
1
A partir do IDLE 3.7.4, agora você pode executar um módulo com argumentos. Use o novo comando Run-> Run with Customized...(atalho Shift + F5) e um pop-up será aberto onde você pode fornecer seus argumentos. Infelizmente, ele não se lembra deles atualmente, então você os colará a cada execução.
Dan Nolan
6

Tente isto

import os
import subprocess

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

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

execFile('helloworld.py')faz o trabalho para mim. Uma coisa a ser observada é inserir o nome completo do diretório do arquivo .py se ele não estiver na própria pasta Python (pelo menos é o caso do Windows)

Por exemplo, execFile('C:/helloworld.py')

optimistic_kid
fonte
4

CAMINHO MAIS FÁCIL

python -i helloworld.py  #Python 2

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

Por exemplo:

import subprocess

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

subprocess.call(["python", "-h"])
Sergey Nosov
fonte
2
subprocess.call(r'c:\path\to\something.py')Nao funciona para mim. OSError: [WinError 193]% 1 não é um aplicativo Win32 válido
Terry Jan Reedy
Tente esta importação os import subprocess DIR = os.path.join ('C: \\', 'Usuários', 'Sergey', 'Desktop', 'a.py') subprocess.call (['python', DIR] )
Sergey Nosov,
1

No Python 3, não existe execFile. Pode-se usar execa função integrada, por exemplo:

import helloworld
exec('helloworld')
piogor
fonte
1

No IDLE, funciona o seguinte: -

import helloworld

Não sei muito sobre por que funciona, mas funciona ..

Aditya Dixit
fonte
o que você está fazendo é carregar um módulo que não está em execução no shell. uma diferença entre os dois é: 1) Carregar o módulo seu nome de módulo nome __ = nome do arquivo 2) executar a partir do nome do módulo shell _name __ = " _main "
tanweer alam
Não é uma boa maneira de executar programas porque, na verdade, você está importando e não executando. Seu conteúdo será importado e não terá sentido se você não quiser utilizá-lo.
Abhijeet.py
1

Para executar um script python em um shell python como Idle ou em um shell Django, você pode fazer o seguinte usando a função exec (). Exec () executa um argumento de objeto de código. Um objeto de código em Python é simplesmente código Python compilado. Portanto, você deve primeiro compilar seu arquivo de script e, em seguida, executá-lo usando exec (). Da sua concha:

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

Estou usando o Python 3.4. Veja os documentos de compilação e exec para informações detalhadas.

y2knoproblem
fonte
1

Eu testei isso e meio que funcionou:

exec(open('filename').read())  # Don't forget to put the filename between ' '
Remache Amine
fonte
obrigado pela dica de cotação, isso funcionou para mim. Votado.
Forever Learner
1

você pode fazer isso de duas maneiras

  • import file_name

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

mas certifique-se de que o arquivo deve ser armazenado onde seu programa está sendo executado

ujjal das
fonte
0

No ambiente Windows, você pode executar o arquivo py na linha de comando do shell Python3 com a seguinte sintaxe:

exec (open ('caminho absoluto para file_name'). read ())

Abaixo, explica como executar um arquivo helloworld.py simples a partir da linha de comando do shell do python

Localização do arquivo: C: /Users/testuser/testfolder/helloworld.py

Conteúdo do arquivo: imprimir ("hello world")

Podemos executar este arquivo no Shell Python3.7 conforme abaixo:

>>> 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
fonte
importar um programa para executá-lo não é uma boa opção. Até eu usei no começo, mas agora eu sei sobre problemas potenciais, como tirar a eficiência do seu programa porque você o está importando (embora seja insignificante).
Abhijeet.py
0

Existe mais uma alternativa (para windows) -

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

Em um console Python, pode-se tentar as 2 maneiras a seguir.

sob o mesmo diretório de trabalho,

1 >> import helloworld

# se você tiver uma variável x , você pode imprimi-la no IDLE.

>> helloworld.x

# se você tiver uma função func , você também pode chamá-la assim.

>> helloworld.func ()

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

LynnSunshine
fonte