Python cmd function call from script - 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: Python cmd function call from script (/thread-2045.html) Pages:
1
2
|
Python cmd function call from script - John_O - Feb-13-2017 Dear all, I found a function which is callable from command line. Now I need to add this function to my script. How can I do this? So if I use CMD, call looks like this -
How can I add the same call in another python script? Thank you for your answer. RE: Python cmd function call from script - peterkl - Feb-13-2017 You can use subprocessing library to do that. subprocess.Popen(you command) RE: Python cmd function call from script - Ofnuts - Feb-14-2017 Hard to answer without looking at the code in fun_name1.py . If it is written adequately, you can import it as a Python module and call the functions it contains directly.
RE: Python cmd function call from script - John_O - Feb-14-2017 (Feb-14-2017, 01:46 AM)Ofnuts Wrote: Hard to answer without looking at the code in Function is stm32loader.py -> stm32 RE: Python cmd function call from script - Ofnuts - Feb-14-2017 (Feb-14-2017, 05:23 AM)John_O Wrote:(Feb-14-2017, 01:46 AM)Ofnuts Wrote: Hard to answer without looking at the code in Well it seems it is. You can try to import it and use the CommandInterface class directly. RE: Python cmd function call from script - Larz60+ - Feb-14-2017 As peterkl suggested - use the subprocess method Here's a link on how to run Linux commands from python. Of the methods shown, the subprocess method is safer than the os.system method. see https://www.cyberciti.biz/faq/python-exe...-examples/ [url=https://www.cyberciti.biz/faq/python-execute-unix-linux-command-examples/][/url] RE: Python cmd function call from script - John_O - Feb-14-2017 Thank you for all your answer. I found one issue if I use subprocess function in combination with stm32loader. So, I have stm32loader.py script and additional file (sthdbg.bin) in mwork directory -> path (/home/projects/mwork) on my RPi. If I use cmd and if I go in mwork directory I can use this command: sudo python stm32loader.py -p '/dev/ttyAMA0' -e -w -v sthdbg.bin If I use this command from another script which is also in mwork directory in combination with subprocess function then command looks like this: subprocess.Popen(['sudo', 'python', 'stm32loader.py', '-p', "/dev/ttyAMA0", '-e', '-w', '-v', sthdbg.bin]) But I get error "NameError: name 'sthdbg' is not defined". Do I need to use path? RE: Python cmd function call from script - buran - Feb-14-2017 It looks like sthdbg.bin should be quoted like the rest of elements in the list supplied to Popen RE: Python cmd function call from script - John_O - Feb-14-2017 I missed that. Thanks. But in case if sthdbg.bin is on other location than script, how can I add the path? Do I need to add absolute path - in my case '/home/projects/mywork/sthdbg.bin'? RE: Python cmd function call from script - buran - Feb-14-2017 yes, I think you need to specify the full path in this case Also, looking at the script, here is some code that should allow to use it to erase, write and verify (based on your cmd line) NOTE THAT IT IS NOT TESTED SO USE IT ON YOUR OWN RISK, but should help you start and experiment import smt32loader as smtl # default address and baudrate, but in the script the defaults are set in if name == '_-main__' # so we need to set up it here address = 0x08000000 #baudrate = 115200 # default QUITE is 20, but if run the script from cmd and don't supply -V or -q, QUITE=5 # mdebug is commented right now smtl.QUITE = 5 port = '/dev/ttyAMA0' bin_file = 'sthdbg.bin' # full path should be here cmd = smtl.CommandInterface() cmd.open(port) # smtl.mdebug(10, "Open port %(port)s, baud %(baud)d" % {'port':port, 'baud':baud}) try: try: cmd.initChip() except: print "Can't init. Ensure that BOOT0 is enabled and reset device" bootversion = cmd.cmdGet() # smtl.mdebug(0, "Bootloader version %X" % bootversion) id = cmd.cmdGetID() # smtl.mdebug(0, "Chip id: 0x%x (%s)" % (id, smtl.chip_ids.get(id, "Unknown"))) # data data = map(lambda c: ord(c), file(bin_file, 'rb').read()) # erase cmd.cmdEraseMemory() # write cmd.writeMemory(address, data) # verify verify = cmd.readMemory(address, len(data)) if(data == verify): print "Verification OK" else: print "Verification FAILED" print str(len(data)) + ' vs ' + str(len(verify)) for i in xrange(0, len(data)): if data[i] != verify[i]: print hex(i) + ': ' + hex(data[i]) + ' vs ' + hex(verify[i]) finally: cmd.releaseChip()there are at least two parts of the code, that I would write differently - line 31 and the loop in lines 42-44, but that's how it is in the original code |