I ”m käyttämällä kahta erillistä komentosarjaa, Scale1.py ja Scale2.py. Suorita ne kirjoittamalla sudo python Scale1.py tai sudo python Scale2.py päätelaitteen komentoriviltä. Haluaisin, että rivillä on Scale2.py komentosarja, jossa jos painan painiketta, ohjelma hajoaa ja suorittaa Scale1.py. Jotain tällaista, joka ei toimi.
if GPIO.input(23) == False: break(sudo python Scale1.py)
vastaus
os.system("sudo python scale1.py")
ensin sinun on tuotava os-moduuli
import os
Minulla ei ole pientä minua testaamaan, mutta tämä tulee toisesta vastauksesta tähän kysymykseen: https://stackoverflow.com/questions/89228/calling-an-external-command-in-python
Kommentit
vastaus
Käytä yleensä aliprosessi -moduulia
subprocess.call(["sudo","python","scale1.py"])
komentorivapuheluille.
Esimerkki aliprosessin kutsun tuloksen käsittelystä;
result = subprocess.check_output(["sudo","service","mpd","restart"])
Aliprosessi korvaa useita vanhempia moduuleja ja toimintoja, kuten os.system ja os.spawn . Se tekee hyvää työtä argumenttien puhdistamisessa, joten se suojaa sinua kuori-injektiolta .
https://docs.python.org/2/library/subprocess.html
Toisen python-komentosarjan suorittamiseksi ei tietenkään tarvitse CLI-kutsua, voit tuoda ne.
Kommentit
Vastaa
Voit käyttää sudoa harry sib -ehdotuksena, mutta sinun on lisättävä ensimmäisen komentosarjan suorittava käyttäjä sudoers-tiedostoon .
Paras tapa suorittaa python-komentosarja toisesta python-komentosarjasta on tuoda se. Skriptisi logiikka on oltava toisen komentosarjan menetelmässä:
# 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()
Kommentit
- +1, Koska python pystyy tähän, se on vastaus
cleanest. - +1 , tämä on oikea tapa tehdä mitä toimenpideohjelma haluaa ja sen pitäisi todennäköisesti olla hyväksytty vastaus.
os.system()on hylättysubprocess: n hyväksi, katso stackoverflow.com/a/4256153/4212158