นี่อาจดูเหมือนคำถามที่สมัครใหม่ แต่ไม่ใช่ วิธีการทั่วไปบางอย่างใช้ไม่ได้ในทุกกรณี:
sys.argv [0]
นี่หมายถึงการใช้path = os.path.abspath(os.path.dirname(sys.argv[0]))
แต่สิ่งนี้ไม่ได้ผลถ้าคุณกำลังเรียกใช้จากสคริปต์ Python อื่นในไดเรกทอรีอื่นและสิ่งนี้สามารถเกิดขึ้นได้ในชีวิตจริง
__ไฟล์__
หมายความว่าใช้path = os.path.abspath(os.path.dirname(__file__))
แต่ฉันพบว่าใช้งานไม่ได้:
py2exe
ไม่มี__file__
แอตทริบิวต์ แต่มีวิธีแก้ไขเฉพาะหน้า- เมื่อคุณเรียกใช้จาก IDLE โดย
execute()
ไม่มี__file__
แอตทริบิวต์ - OS X 10.6 ที่ฉันได้รับ
NameError: global name '__file__' is not defined
คำถามที่เกี่ยวข้องกับคำตอบที่ไม่สมบูรณ์:
- Python - ค้นหาเส้นทางสู่ไฟล์ที่กำลังทำงาน
- พา ธ ไปยังไฟล์ปัจจุบันขึ้นอยู่กับว่าฉันจะรันโปรแกรมอย่างไร
- จะทราบเส้นทางของสคริปต์ที่ทำงานอยู่ใน Python ได้อย่างไร?
- เปลี่ยนไดเรกทอรีเป็นไดเรกทอรีของสคริปต์ Python
ฉันกำลังมองหาโซลูชันทั่วไปซึ่งสามารถใช้ได้ในทุกกรณีการใช้งานด้านบน
ปรับปรุง
นี่คือผลลัพธ์ของ testcase:
ผลลัพธ์ของ python a.py (บน Windows)
a.py: __file__= a.py
a.py: os.getcwd()= C:\zzz
b.py: sys.argv[0]= a.py
b.py: __file__= a.py
b.py: os.getcwd()= C:\zzz
a.py
#! /usr/bin/env python
import os, sys
print "a.py: sys.argv[0]=", sys.argv[0]
print "a.py: __file__=", __file__
print "a.py: os.getcwd()=", os.getcwd()
print
execfile("subdir/b.py")
subdir / b.py
#! /usr/bin/env python
import os, sys
print "b.py: sys.argv[0]=", sys.argv[0]
print "b.py: __file__=", __file__
print "b.py: os.getcwd()=", os.getcwd()
print
ต้นไม้
C:.
| a.py
\---subdir
b.py
NameError: global name '__file__' is not defined
ใช้ไฟล์และนี่ไม่ได้อยู่ใน IDLE คิดว่า__file__
ถูกกำหนดไว้เฉพาะในโมดูล