Nếu bạn đang chạy tập lệnh python bị đóng băng (thư mục sử dụng py2exe) từ thư mục và ổ đĩa khác với vị trí của tập lệnh, cách tốt nhất để xác định đường dẫn thực thi kịch bản?Cách lấy Đường dẫn của tập lệnh đông lạnh thực hiện
Rất ít giải pháp tôi đã cố gắng
inspect.getfile(inspect.currentframe())
Vấn đề: Không trả về đường dẫn đầy đủ. Nó chỉ trả về tên kịch bản.
os.path.abspath(__file__)
Vấn đề: Không làm việc trên Windows
os.path.dirname(sys.argv[0])
Vấn đề: Trả về chuỗi rỗng.
os.path.abspath(inspect.getsourcefile(way3))
sẽ không hoạt động nếu ổ đĩa khác với pwd
os.path.dirname(os.path.realpath(sys.argv[0]))
sẽ không hoạt động nếu ổ đĩa khác với pwd
Dưới đây là một không tối thiểu làm ví dụ
D:\>path
PATH=c:\Python27\;c:\Users\abhibhat\Desktop\ToBeRemoved\spam\dist\;c:\gnuwin32\bin
D:\>cat c:\Users\abhibhat\Desktop\ToBeRemoved\spam\eggs.py
import os, inspect, sys
def way1():
return os.path.dirname(sys.argv[0])
def way2():
return inspect.getfile(inspect.currentframe())
def way3():
return os.path.dirname(os.path.realpath(sys.argv[0]))
def way4():
try:
return os.path.abspath(__file__)
except NameError:
return "Not Found"
def way5():
return os.path.abspath(inspect.getsourcefile(way3))
if __name__ == '__main__':
print "Path to this script is",way1()
print "Path to this script is",way2()
print "Path to this script is",way3()
print "Path to this script is",way4()
print "Path to this script is",way5()
D:\>eggs
Path to this script is
Path to this script is eggs.py
Path to this script is D:\
Path to this script is Not Found
câu hỏi liên quan:
- How to know the path of the running script in Python?
- How do I get the path and name of the file that is currently executing?
- python, path of script [closed]
Note
@ giải pháp Fenikso sẽ hoạt động nếu kịch bản nằm trên cùng một ổ đĩa mà bạn đang thực hiện nhưng khi nó trên một ổ đĩa khác nhau, nó sẽ không làm việc
Có, điều này cũng hoạt động với py2exe. –
@Fenikso: Công trình này hoàn hảo. Trước khi đăng câu hỏi này tôi đã thấy vài tham chiếu đến cùng một vấn đề trong SO, nhưng không có câu trả lời nào là không chính xác cho mỗi lần '. – Abhijit