কম্পিউটার টিউটোরিয়াল

পাইথন স্টেটমেন্ট এক্সিকিউশন ট্রেস বা ট্র্যাক করা (trace)

পাইথন লাইব্রেরির '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
  1. পাইথন if স্টেটমেন্টের সঠিক সিনট্যাক্স কী?

  2. পাইথন প্রোগ্রামের এক্সিকিউশন টাইম কীভাবে পাবেন?

  3. পাইথনে স্ক্রিনে আউটপুট করার সম্পূর্ণ গাইড

  4. পাইথনে assert স্টেটমেন্টের ব্যবহার