IDLE etkileşimli kabuktan bir python betiği nasıl çalıştırılır?


103

IDLE etkileşimli kabuğundan bir python komut dosyasını nasıl çalıştırırım?

Aşağıdakiler bir hata verir:

>>> python helloworld.py
SyntaxError: invalid syntax

Neye helloworld.pybenziyor?
TerryA

evet bu, kod yazarken kodunuzla ilgili bir sorun olduğu anlamına gelir!
Seri

12
Hayır, zorunlu olarak değil. Muhtemelen OP python helloworld.pybir IDLE kabuk penceresinde yazıyor ve bu işe yaramıyor.
Ned Deily

Standart tercümanda da çalışmaz. Bu sorun, insanların yanlışlıkla tercüman isteminin bir komut satırı istemi olduğunu düşündüklerinde ortaya çıkmıştır.
Terry Jan Reedy

Sorunuzu doğru cevapladıysanız Ned Deily'den gelen cevabı kabul etmelisiniz. Bu aynı zamanda geliştiricilerin doğru cevabı hızlı bir şekilde bulmalarına yardımcı olacaktır.
Krishna Oza

Yanıtlar:


144

Python3 :

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

Dosyanız aynı dizinde değilse:

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

Global / yerel değişkenleri geçirmek için https://stackoverflow.com/a/437857/739577 adresine bakın .


Kullanımdan kaldırılmış Python sürümlerinde

Python2 Yerleşik işlevi: execfile

execfile('helloworld.py')

Normalde bağımsız değişkenlerle çağrılamaz. Ama işte bir çözüm:

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

2.6'dan beri kullanımdan kaldırıldı: popen

import os
os.popen('python helloworld.py') # Just run the program
os.popen('python helloworld.py').read() # Also gets you the stdout

Bağımsız değişkenlerle:

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

Gelişmiş kullanım: alt süreç

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

Bağımsız değişkenlerle:

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

Ayrıntılar için belgeleri okuyun :-)


Bu temel ile test edildi helloworld.py:

import sys
if len(sys.argv) > 1:
    print(sys.argv[1])

2
Lütfen komut satırı argümanları içeren bir örnek ekleyebilir misiniz?
ViFI

1
Python3 ile çalışmıyor ve soru soran Python sürümünü açıkça belirtmedi
Suncatcher

Eklenen execPython3 için
Fontenelle Hugues

35

Bunu python3'te kullanabilirsiniz:

exec(open(filename).read())

24

IDLE kabuk penceresi bir terminal kabuğuyla aynı değildir (örn. Çalışan shveya bash). Daha ziyade, tıpkı Python etkileşimli yorumlayıcısında ( python -i) olmak gibidir. IDLE'de bir komut dosyası çalıştırmanın en kolay yolu , komut dosyanızı bir IDLE düzenleyici penceresine yüklemek için menüden Openkomutu kullanmaktır File(bu, çalıştırdığınız platforma bağlı olarak biraz değişebilir) ve ardından Run-> Run Modulekomutunu (kısayol F5).


1
Ama tartışmaya giremezsin. :(
Erica Kane

3
Ne yazık ki hayır, komut satırı argümanlarını iletirken bir Python dosyasını IDLE'de çalıştırmak kolay değildir. IDLE'nin bunu yapması için uzun süredir devam eden bir açık sorun var ( bugs.python.org/issue5680 ). Test için bir geçici çözüm sys.argv, programın en başında, örneğin normal standart if __name__ == "__main__"şablon altında manuel olarak başlatmaktır .
Ned Deily

Bu cevap, IDLE kabuğunu kullanarak neden python betiğini çalıştıramadığımızı açıklığa kavuşturuyor. Teşekkürler @NedDeily
arsho

1
IDLE 3.7.4'ten itibaren, artık bağımsız değişkenlerle bir modülü çalıştırabilirsiniz. Yeni Run-> Run with Customized...komutunu (kısayol Shift + F5) kullanın ve argümanlarınızı sağlayabileceğiniz bir açılır pencere açılacaktır. Maalesef şu anda onları hatırlamıyor, bu yüzden onları her çalıştırmada yapıştıracaksınız.
Dan Nolan

6

Bunu dene

import os
import subprocess

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

subprocess.call(['python', DIR])

4

execFile('helloworld.py')işi benim için yapıyor. Dikkat edilmesi gereken bir nokta, Python klasörünün kendisinde değilse .py dosyasının tam dizin adını girmektir (en azından Windows'ta durum böyledir)

Örneğin, execFile('C:/helloworld.py')


4

EN KOLAY YOL

python -i helloworld.py  #Python 2

python3 -i helloworld.py #Python 3

2

Örneğin:

import subprocess

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

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

2
subprocess.call(r'c:\path\to\something.py')benim için çalışmıyor. OSError: [WinError 193]% 1 geçerli bir Win32 uygulaması değil
Terry Jan Reedy

Bu import os import alt işlemini deneyin DIR = os.path.join ('C: \\', 'Users', 'Sergey', 'Desktop', 'a.py') subprocess.call (['python', DIR] )
Sergey Nosov

1

Python 3'te yok execFile. Yerleşik execişlev kullanılabilir, örneğin:

import helloworld
exec('helloworld')

1

IDLE'de aşağıdakiler çalışır: -

import helloworld

Neden işe yaradığını bilmiyorum ama işe yarıyor ..


Yaptığınız şey kabuktan çalışmayan bir modül yüklemek. ikisi arasındaki bir fark şudur: 1) Modül yükleme modülünüzün adı __ = dosyanın adı 2) kabuk modül adı _name __ = " _main " den çalıştır
tanweer alam

Programları çalıştırmanın iyi bir yolu değildir çünkü aslında içeri aktarıyorsunuz ve çalıştırmıyorsunuz. İçeriği içe aktarılacak ve kullanmak istemiyorsanız anlamsız olacaktır.
Abhijeet.py

1

Idle gibi bir python kabuğunda veya bir Django kabuğunda bir python betiğini çalıştırmak için exec () işlevini kullanarak aşağıdakileri yapabilirsiniz. Exec (), bir kod nesnesi bağımsız değişkenini yürütür. Python'daki bir kod nesnesi, basitçe derlenmiş Python kodudur. Bu nedenle, önce betik dosyanızı derlemeniz ve ardından exec () kullanarak çalıştırmanız gerekir. Kabuğunuzdan:

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

Python 3.4 kullanıyorum. Bakın derleme ve yürütme belgelerine bakın.


1

Bunu test ettim ve işe yarıyor:

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

teklif ipucu için teşekkürler, bu benim için çalıştı. Olumlu oy verildi.
Forever Learner

1

bunu iki yoldan yapabilirsin

  • import file_name

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

ancak bu dosyanın programınızın çalıştığı yerde saklandığından emin olun


0

Windows ortamında, py dosyasını Python3 kabuk komut satırında aşağıdaki sözdizimi ile çalıştırabilirsiniz:

exec (open ('dosya_adı için mutlak yol'). read ())

Aşağıda python kabuk komut satırından basit bir helloworld.py dosyasının nasıl çalıştırılacağı açıklanmaktadır

Dosya Konumu: C: /Users/testuser/testfolder/helloworld.py

Dosya İçeriği: yazdır ("merhaba dünya")

Bu dosyayı Python3.7 Shell üzerinde aşağıdaki gibi çalıştırabiliriz:

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

bir programı çalıştırmak için içeri aktarmak iyi bir seçenek değildir. Ben bile başlangıçta kullandım ama şimdi programınızın etkinliğini ortadan kaldırması gibi olası sorunları biliyorum, çünkü onu içe aktarıyorsunuz (önemsiz de olsa).
Abhijeet.py

0

Bir alternatif daha var (Windows için) -

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

0

Bir python konsolunda, aşağıdaki 2 yolu deneyebilirsiniz.

aynı çalışma dizini altında,

1. >> helloworld'ü içe aktar

# değişken x'iniz varsa varsa, IDLE'da yazdırabilirsiniz.

>> helloworld.x

# Eğer bir fonksiyon varsa fonk , bunu şu şekilde de çağırabilirsiniz.

>> helloworld.func ()

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

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.