Just for fun.
Bagaimana seandainya program/ script Python yang kita buat hanya dapat dieksekusi beberapa kali saja. Setelah itu programnya otomatis kehapus. Kalaupun dicopy lagi tetap ga bisa jalan.
Hmm... Kalau user yang ga ngerti Python sih bisa. Tapi kalau yang jago?
Iseng-iseng saya buat script lalu saya sisipkan ke program saya yang lain. Dan lumayan, dia kontak terus menanyakan programnya hilang sendiri. Setelah dicopy ulang kadang bisa jalan dan kadang ga. Tujuan saya jadi tercapai, karena 'dia' jadi ingat saya..
Langsung saja begini scriptnya:
import os, sys
import random, time
class UnlinkMe:
'''
class UnlinkMe
Just for fun, limiting an application that can be executed
'''
pickn = '____.db'
finish= False
def __init__(self, lim = 10, **kwarg):
'''
1st argumen is limit: integer: how many trial
verbose: boolean: set True to display message
'''
self.verbose = kwarg.get('verbose', False)
self.limit = int(lim)
self.selfn = sys.argv[0]
if os.path.isfile(self.pickn):
with open(self.pickn,'rb') as fd:
self.limit = pickle.load(fd)
self.verbose and print(f'Load limit {self.limit}')
else:
self.save()
self.test()
def save(self):
'''save limit'''
with open(self.pickn,'wb') as fd:
pickle.dump(self.limit,fd)
self.verbose and print(f'Dump limit {self.limit}')
def test(self):
'''evaluate execution times'''
if self.limit < 0 and not self.finish:
self.verbose and print('Warning!')
try:
self.verbose and print('Try to unlink ..')
os.unlink(self.selfn)
self.finish = True
self.verbose and print('Unlink finished')
except:
self.verbose and print('Error unlink')
if self.finish:
#exit on probability one of three for fun
random.randint(1,3)==1 and exit(1)
self.limit -= 1
self.save()
return self.finish
#end of class----
def dummy_process(n):
'''display random progress bar'''
t = random.randint(3, 20)
for i in range(t):
print(f'\r{n:02d} ', end='')
print('='*int((i+1)/t*50), end='')
time.sleep(0.1)
print()
# ----- main program ---------
if __name__ == '__main__':
limit = 10
dm = UnlinkMe(limit) #,verbose=True)
print(f'Demo by limiting about {limit}+random times')
print('Warning, script would be missing after that')
print('\nPress Ctrl+C to break dummy process any time')
i = 0
while True:
i += 1
dummy_process(i)
dm.test()
time.sleep(2)
Pada baris bagian bawah ada contoh cara penggunaannya. Cukup UnlinkMe(10) misalnya, untuk membatasi aplikasi hanya dapat dieksekusi sekitar 10x. Kalau usernya sedang berutung bisa dieksekusi beberapa kali lagi.
Kalau suatu proses atau suatu fitur dalam aplikasi yang mau kita batasi, pakai method .test() setiap kali proses atau fitur diakses.