Eu tenho um comando shell que executa um comando e o envia através do pipe para um arquivo python. O arquivo python faz várias verificações e, em seguida, inicia processos com parâmetros usando subprocess.Popen. Mas vejo que isso só funciona quando eu executo a coisa toda em uma concha. Existe outra maneira de eu executar isso além de shell. Se eu apenas executar sem shell ou usar & para mantê-lo em segundo plano, os processos iniciados pelo python são nomeados extintos na tabela ps -e. Alguém pode ajudar?
EDITAR:
Aqui está o run.sh, que eu executo:
#!/bin/bash
padsp julius -input mic -C $HOME/project/julius-grammer/julian.jconf | python -u $HOME/project/pythonControls/getcommand.py
No entanto, nem todos os subprocess.popen não são executados. Por exemplo, se eu usar o programa do festival, ele será executado. No entanto, o xbacklight não.
isto é getcommand.py:
Eu removi a parte desnecessária, e esta que é necessária, com string, eu sei que esta seleção está indo bem.:
if(com == "COMPLETE BRIGHTNESS"):
userin = Data(["xbacklight", "-set", "100"],"Maximum brightness")
userin.interact()
if(com == "HALF BRIGHTNESS"):
userin = Data(["/usr/bin/xbacklight", "-set", "50"],"Partial brightness")
userin.interact()
if(com == "ZERO BRIGHTNESS"):
userin = Data(["/usr/bin/xbacklight","-set", "0"],"Minimal brightness")
userin.interact()
Agora chegando aos objetos, é assim que a classe vai:
class Data:
def __init__(self, com="", msg="", sp="False"):
self.command = com
self.message = msg
self.speak = sp
def interact(self):
if self.command != "":
co = subprocess.Popen(self.command,stdout=subprocess.PIPE)
co.wait()
if self.speak == True:
self.say(self.message)
else:
subprocess.Popen(["notify-send","SysSec", self.message])