Grabbing a value from one python script into another - Printable Version +- Python Forum (https://python-forum.io) +-- Forum: Python Coding (https://python-forum.io/forum-7.html) +--- Forum: General Coding Help (https://python-forum.io/forum-8.html) +--- Thread: Grabbing a value from one python script into another (/thread-18615.html) |
Grabbing a value from one python script into another - nickayres - May-24-2019 Hi, Very new to Python and trying to figure out how I can get the value from a variable in one script into another. I have a python script called "Accelerator" which gets a constantly changing value from a UDP packet and then prints that value to the screen -> print("Revs = " + str(int(revsPC))) What I want to do is grab that value in revsPC pass it to another script and display it I have tried the import i.e import Accelerator but this I understand executes the whole Accelerator script which throws up an error. I have also tried import revsPC from Accelerator but that doesn't seem to do anything. Am I missing something really obvious? I am very new to python so my ignorance is high! Thanks in advance for any help. RE: Grabbing a value from one python script into another - snippsat - May-24-2019 # Accelerator.py revs_pc = 999 if __name__ == '__main__': print(f"Revs = {revs_pc}") # bar.py import Accelerator import math def foo(arg): value = math.factorial(arg) + Accelerator.revs_pc return value if __name__ == '__main__': print(foo(10)) So it's a good practice to use if __name__ == '__main__' ,then dos code after that do not execute when import it.Have to call Accelerator.revs_pc to get 999.Also look that i use f-string to avoid the not so nice way print("Revs = " + str(int(revsPC))) .
RE: Grabbing a value from one python script into another - nickayres - May-24-2019 That's great and works a treat but the revsPC data is generated from a value inside a UDP packet where the connection is established at the start of the script and the the revsPC variable is inside a loop. I know my syntax is not great or neat but it does do the basic job of determining my revsPC value. import sys import socket import time UDP_IP = "" UDP_PORT1 = 40002 sock1 = socket.socket(socket.AF_INET, socket.SOCK_DGRAM) sock1.bind((UDP_IP, UDP_PORT1)) #definition of the function for mapping a range values to another def translate(value, inputMin, inputMax, outputMin, outputMax): # Figure out how 'wide' each range is inputSpan = inputMax - inputMin outputSpan = outputMax - outputMin # Convert the input range into a 0-1 range (float) valueScaled = float(value - inputMin) / float(inputSpan) # Convert the 0-1 range into a value in the output range. return outputMin + (valueScaled * outputSpan) counter = 0 while True: #Beginning of the program tmps1=time.time() data, addr = sock1.recvfrom(1024) # length of the buffer : 1024 bytes hiValRPM = data1[0] loValRPM = data1[1] print("--------------------------") print("Data Received : " + str(hiValRPM) + "/" + str(loValRPM)) print(" ") #Revs : Mapping from 0-1023 to 0-6000 if(hiValRPM == 0): revsPC = translate(loValRPM, 0, 255, 0, 1503) elif(hiValRPM == 1): revsPC = translate(loValRPM, 0, 255, 1504, 3004) elif(hiValRPM == 2): revsPC = translate(loValRPM, 0, 255, 3005, 4503) elif(hiValRPM == 3): revsPC = translate(loValRPM, 0, 255, 4504, 6000) print("Revs = " + str(int(revsPC))) #Calculation of the program execution time tmps2=(time.time()-tmps1)*1000 print ("Execution time = %f ms" %tmps2) counter += 1 print("Packet number : " + str(counter)) RE: Grabbing a value from one python script into another - snippsat - May-24-2019 Now you run a infinity loop(while True) with no break out of the loop. So need a way to get value out,one way can by to rewire it so it's a generator. # Accelerator.py import random import time def foo(): while True: time.sleep(3) revs_pc = random.randint(1,10) yield revs_pc # bar.py import Accelerator for i in range(10): revs_pc = next(Accelerator.foo()) revs_pc += 9 # do something with revs_pc value print(revs_pc)
|