পাইথন লাইব্রেরির 'trace' মডিউলের ফাংশন প্রোগ্রাম এক্সিকিউশনের ট্রেস জেনারেট করে এবং এনোটেটেড স্টেটমেন্ট কভারেজ প্রদান করে। এছাড়া রানটাইমে কল করা ফাংশনগুলোর তালিকা তৈরি করে কলার রিলেশনশিপ জেনারেট করার ফাংশনও রয়েছে।
উদাহরণ স্ক্রিপ্ট
trace মডিউলের বৈশিষ্ট্য প্রদর্শনের জন্য নিচের দুটি পাইথন স্ক্রিপ্ট ব্যবহৃত হয়েছে:
# myfunctions.py
import math
def area(x):
a = math.pi * math.pow(x, 2)
return a
def factorial(x):
if x == 1:
return 1
else:
return x * factorial(x - 1)
# mymain.py
import myfunctions
def main():
x = 5
print('area=', myfunctions.area(x))
print('factorial=', myfunctions.factorial(x))
if __name__ == '__main__':
main()
কমান্ড লাইন ইন্টারফেস
'trace' মডিউলের কমান্ড লাইন ইন্টারফেস রয়েছে। মডিউলের সকল ফাংশন কমান্ড লাইন সুইচ ব্যবহার করে কল করা যায়। সবচেয়ে গুরুত্বপূর্ণ অপশন হল --trace যা এক্সিকিউশনের সময় প্রোগ্রাম লাইনগুলো প্রদর্শন করে। নিচের উদাহরণে অন্য একটি অপশন --ignore-dir ব্যবহার করা হয়েছে। এটি নির্দিষ্ট ডিরেক্টরিগুলো ট্রেস জেনারেট করার সময় উপেক্ষা করে।
E:\python37>python -m trace --ignore-dir=../lib --trace mymain.py
আউটপুট
mymain.py(2): def main():
mymain.py(7): if __name__=='__main__':
mymain.py(8): main()
--- modulename: mymain, funcname: main
mymain.py(3): x=5
mymain.py(4): print ('area=',myfunctions.area(x))
--- modulename: myfunctions, funcname: area
myfunctions.py(3): a=math.pi*math.pow(x,2)
myfunctions.py(4): return a
area= 78.53981633974483
mymain.py(5): print ('factorial=',myfunctions.factorial(x))
--- modulename: myfunctions, funcname: factorial
myfunctions.py(6): if x==1:
myfunctions.py(9): return x*factorial(x-1)
--- modulename: myfunctions, funcname: factorial
myfunctions.py(6): if x==1:
myfunctions.py(9): return x*factorial(x-1)
--- modulename: myfunctions, funcname: factorial
myfunctions.py(6): if x==1:
myfunctions.py(9): return x*factorial(x-1)
--- modulename: myfunctions, funcname: factorial
myfunctions.py(6): if x==1:
myfunctions.py(7): return 1
factorial= 120
--count অপশন
--count অপশন ব্যবহারে ব্যবহারৃত প্রতিটি মডিউলের জন্য .cover এক্সটেনশন সহ একটি ফাইল তৈরি হয়।
E:\python37>python -m trace --count mymain.py area= 78.53981633974483 factorial = 120
myfunctions.cover
1: import math 1: def area(x): 1: a = math.pi*math.pow(x,2) 1: return a 1: def factorial(x): 5: if x==1: 1: return 1 else: 4: return x*factorial(x-1)
mymain.cover
1: import myfunctions
1: def main():
1: x = 5
1: print ('area=',myfunctions.area(x))
1: print ('factorial=',myfunctions.factorial(x))
1: if __name__=='__main__':
1: main()
--summary অপশন
--summary অপশন --count অপশনও ব্যবহার করলে সংক্ষিপ্ত সারাংশ প্রদর্শন করে।
E:\python37>python -m trace --count --summary mymain.py area = 78.53981633974483 factorial = 120 lines cov% module (path) 8 100% myfunctions (E:\python37\myfunctions.py) 7 100% mymain (mymain.py)
--file অপশন
--file অপশন সেই ফাইলের নাম নির্দিষ্ট করে যেখানে একাধিক ট্রেসিং রানের কাউন্ট জমা হবে।
E:\python37>python -m trace --count --file report.txt mymain.py area = 78.53981633974483 factorial = 120 Skipping counts file 'report.txt': [Errno 2] No such file or directory: 'report.txt' E:\python37>python -m trace --count --file report.txt mymain.py area= 78.53981633974483 factorial= 120
--listfuncs অপশন
--listfuncs অপশন প্রোগ্রাম এক্সিকিউশনের সময় কল করা ফাংশনগুলো প্রদর্শন করে।
E:\python37>python -m trace --listfunc mymain.py | findstr -v importlib area= 78.53981633974483 factorial= 120 functions called: filename: E:\python37\lib\encodings\cp1252.py, modulename: cp1252, funcname: IncrementalEncoder.encode filename: E:\python37\myfunctions.py, modulename: myfunctions, funcname:filename: E:\python37\myfunctions.py, modulename: myfunctions, funcname: area filename: E:\python37\myfunctions.py, modulename: myfunctions, funcname: factorial filename: mymain.py, modulename: mymain, funcname: filename: mymain.py, modulename: mymain, funcname: main
--trackcalls অপশন
--trackcalls অপশন --listfuncs অপশনের সাথে ব্যবহার করা হয়। এটি কলিং রিলেশনশিপ জেনারেট করে।
E:\python37>python -m trace --listfunc --trackcalls mymain.py | findstr -v importlib area= 78.53981633974483 factorial= 120 calling relationships: --> E:\python37\myfunctions.py *** E:\python37\lib\trace.py *** --> mymain.py trace.Trace.runctx -> mymain.*** E:\python37\myfunctions.py *** myfunctions.factorial -> myfunctions.factorial *** mymain.py *** mymain. -> mymain.main --> E:\python37\lib\encodings\cp1252.py mymain.main -> cp1252.IncrementalEncoder.encode --> E:\python37\myfunctions.py mymain.main -> myfunctions.area mymain.main -> myfunctions.factorial