Sign up ×
Raspberry Pi Stack Exchange is a question and answer site for users and developers of hardware and software for Raspberry Pi. It's 100% free, no registration required.

I'm using 2 separate scripts, Scale1.py and Scale2.py. To run them I enter sudo python Scale1.py or sudo python Scale2.py from the terminal command line. I would like to have a line in the Scale2.py script in which if I press a button, the program breaks and runs Scale1.py. Something like this, which doesn't work.

if (GPIO.input(23) == False ):
    break(sudo python Scale1.py)
share|improve this question

3 Answers 3

up vote 4 down vote accepted

os.system("sudo python scale1.py")

first you will need to import the os module

import os

I don't have a pi with me atm to test, but this comes from the second answer to this question: http://stackoverflow.com/questions/89228/calling-an-external-command-in-python

share|improve this answer
    
This is what I tried and it worked, thanks a lot Harry! But I did have to combine both programs first. Now the os.system("sudo python Scale3.py") simply restarts at the beginning of Scale3.py program, which is fine. I think import Scale3.py will also work. I didn't try subprocess, it does look interesting and is probably something I need to learn. –  Rico May 25 '14 at 20:26

You can use sudo as harry sib suggested, but you would have to add the user running the first script to the sudoers file.

The best way to run a python script from another python script is to import it. You should have the logic of your script in a method in the second script:

# Scale2.py
def run():
    do_first()
    do_second()
    [...]

# Run it only if called from the command line
if __name__ == '__main__':
    run()
# Scale1.py
import Scale2

if (GPIO.input(23) == False):
    Scale2.run()
share|improve this answer
2  
+1, Since python is capable of this, it will be the cleanest answer. –  LuWi May 21 '14 at 19:35
1  
+1, this is the correct way to do what the OP wants and should probably be the accepted answer. –  Dan Nixon May 27 '14 at 16:10

In general, use the subprocess module

subprocess.call(["sudo","python","scale1.py"]) 

for command line calls.

An example processing the result of a subprocess call;

 result = subprocess.check_output(['sudo','service','mpd','restart'])

Subprocess replaces several older modules and functions, like os.system and os.spawn. It does a good job in sanitizing arguments, so it protects you from shell injection.

https://docs.python.org/2/library/subprocess.html

Of course to run a second python script there is no need for CLI call, you can import those.

share|improve this answer

Your Answer

 
discard

By posting your answer, you agree to the privacy policy and terms of service.

Not the answer you're looking for? Browse other questions tagged or ask your own question.