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