Kuinka suoritan komentorivikomennon Python-komentosarjassa?

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

  • Tätä yritin ja se toimi, kiitos paljon Harry! Mutta Minun oli ensin yhdistettävä molemmat ohjelmat. Nyt os.system (" sudo python Scale3.py ") käynnistyy yksinkertaisesti uudelleen alussa Scale3.py-ohjelmasta, mikä on hieno. Luulen, että myös Scale3.py-tuonti toimii. En kokeillut ' en kokeillut aliprosessia, se näyttää mielenkiintoiselta ja luultavasti minun on opittava .
  • os.system() on hylätty subprocess: n hyväksi, katso stackoverflow.com/a/4256153/4212158

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

  • I ' yritän oppia antamaan komentoja Python-komentosarjassa (katso täällä ja täällä ) ja joilla on joitain ongelmia. Ihmettelen, voisiko subprocess olla parempi myös minun tapauksessani.

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.

Vastaa

Sähköpostiosoitettasi ei julkaista. Pakolliset kentät on merkitty *