ฉันพยายามรันไฟล์ด้วยคำสั่ง python จากภายในล่าม
แก้ไข: ฉันพยายามใช้ตัวแปรและการตั้งค่าจากไฟล์นั้นไม่ต้องเรียกใช้กระบวนการแยกต่างหาก
ฉันพยายามรันไฟล์ด้วยคำสั่ง python จากภายในล่าม
แก้ไข: ฉันพยายามใช้ตัวแปรและการตั้งค่าจากไฟล์นั้นไม่ต้องเรียกใช้กระบวนการแยกต่างหาก
คำตอบ:
ได้หลายวิธี
จากเปลือก
python someFile.py
จากภายใน IDLE กดF5
หากคุณกำลังพิมพ์แบบโต้ตอบให้ลองสิ่งนี้: ( Python 2 เท่านั้น !)
>>> variables= {}
>>> execfile( "someFile.py", variables )
>>> print variables # globals from the someFile module
สำหรับ Python3ให้ใช้:
>>> exec(open("filename.py").read())
python
ไม่ทำงานหากคุณใช้งาน python 3 แต่python3
จะใช้งานแทน
stdin
จากไฟล์อย่างที่ใช้<
กับสคริปต์การเรียกใช้ด้วยในexecfile()
? @ s-lott
python
python3
python
PATH
สำหรับ Python 2:
>>> execfile('filename.py')
สำหรับ Python 3:
>>> exec(open("filename.py").read())
# or
>>> from pathlib import Path
>>> exec(Path("filename.py").read_text())
ดูเอกสาร หากคุณใช้ Python 3.0 ดูคำถามนี้
ดูคำตอบโดย @ S.Lott สำหรับตัวอย่างของวิธีการเข้าถึง globals จาก filename.py หลังจากเรียกใช้งาน
exec(open("./path/to/script.py").read(), globals())
สิ่งนี้จะดำเนินการสคริปต์และวางตัวแปรสากลทั้งหมดไว้ในขอบเขตส่วนกลางของล่าม (พฤติกรรมปกติในสภาพแวดล้อมการเขียนสคริปต์ส่วนใหญ่)
แปลกใจที่ฉันยังไม่เห็นสิ่งนี้ คุณสามารถเรียกใช้ไฟล์จากนั้นเปิดล่ามไว้หลังจากที่การดำเนินการสิ้นสุดลงโดยใช้-i
ตัวเลือก:
| foo.py |
----------
testvar = 10
def bar(bing):
return bing*3
--------
$ python -i foo.py
>>> testvar
10
>>> bar(6)
18
ฉันกำลังพยายามใช้ตัวแปรและการตั้งค่าจากไฟล์นั้นไม่เรียกใช้กระบวนการแยกต่างหาก
เพียงนำเข้าไฟล์ด้วยimport filename
(ลบด้วย. จำเป็นต้องอยู่ในไดเรกทอรีเดียวกันหรือบนของคุณPYTHONPATH
) จะเรียกใช้ไฟล์ทำให้ตัวแปรฟังก์ชั่นคลาส ฯลฯ มีอยู่ในfilename.variable
เนมสเปซ
ดังนั้นหากคุณมีcheddar.py
ตัวแปรสแปมและไข่ฟังก์ชัน - คุณสามารถนำเข้าได้ด้วยimport cheddar
ให้เข้าถึงตัวแปรด้วยcheddar.spam
และเรียกใช้ฟังก์ชันโดยการโทรcheddar.eggs()
หากคุณมีรหัสcheddar.py
ที่อยู่นอกฟังก์ชั่นมันจะถูกเรียกใช้ทันที แต่การสร้างแอปพลิเคชันที่รันของที่นำเข้าจะทำให้ยากที่จะนำรหัสของคุณกลับมาใช้ใหม่ ถ้าเป็นไปได้ให้ใส่ทุกอย่างไว้ในฟังก์ชั่นหรือคลาส
from filename import *
จากมุมมองของฉันวิธีที่ดีที่สุดคือ:
import yourfile
และหลังจากแก้ไข yourfile.py
reload(yourfile)
หรือ
import imp;
imp.reload(yourfile) in python3
แต่สิ่งนี้จะทำให้ฟังก์ชันและคลาสดูเหมือนว่า: yourfile.function1, yourfile.class1 .....
หากคุณไม่สามารถยอมรับสิ่งเหล่านั้นได้ทางออกสุดท้ายคือ:
reload(yourfile)
from yourfile import *
ฉันไม่ใช่ผู้เชี่ยวชาญ แต่เป็นสิ่งที่ฉันสังเกตเห็น:
หากรหัสของคุณคือ mycode.py และคุณเพียงพิมพ์ 'import mycode' Python จะเรียกใช้งาน แต่มันจะไม่ทำให้ตัวแปรทั้งหมดของคุณพร้อมใช้งานสำหรับล่าม ฉันพบว่าคุณควรพิมพ์ 'จาก mycode import *' หากคุณต้องการให้ตัวแปรทั้งหมดพร้อมใช้งานสำหรับล่าม
แค่ทำ,
from my_file import *
ตรวจสอบให้แน่ใจว่าไม่ได้เพิ่มนามสกุล. py หากไฟล์. py ของคุณใช้งานไดเรกทอรีย่อย
from my_dir.my_file import *
สำหรับการใช้งาน python3 ทั้งที่มีของxxxx = name
yourfile
exec(open('./xxxx.py').read())
สำหรับ Python 3:
>>> exec(open("helloworld.py").read())
ตรวจสอบให้แน่ใจว่าคุณอยู่ในไดเรกทอรีที่ถูกต้องก่อนเรียกใช้คำสั่ง
หากต้องการเรียกใช้ไฟล์จากไดเรกทอรีอื่นคุณสามารถใช้คำสั่งด้านล่าง:
with open ("C:\\Users\\UserName\\SomeFolder\\helloworld.py", "r") as file:
exec(file.read())
สมมติว่าคุณต้องการคุณสมบัติต่อไปนี้:
__name__ == '__main__'
เป็น True ดังนั้นสคริปต์จะทำงานอย่างถูกต้องเหมือนสคริปต์exec(open('foo.py').read())
ล้มเหลวคุณลักษณะ 1 import foo
กลยุทธ์ล้มเหลวคุณลักษณะ 2
ในการรับทั้งสองอย่างคุณจะต้อง:
source = open(filename).read()
code = compile(source, filename, 'exec')
exec(code)