Mam skrypt, w którym uruchamiam się za pomocą polecenia powłoki. Problem polega na tym, że skrypt nie czeka, aż polecenie popen zakończy się i od razu kontynuuje działanie.
om_points = os.popen(command, "w")
.....
Jak mogę powiedzieć mojemu skryptowi Pythona, aby zaczekał, aż polecenie powłoki zakończy się?
python
subprocess
wait
popen
michele
źródło
źródło
subprocess.run()
został dodany w Pythonie 3.5 i jest „Zalecanym podejściem do wywoływania podprocesów”Możesz użyć,
subprocess
aby to osiągnąć.import subprocess #This command could have multiple commands separated by a new line \n some_command = "export PATH=$PATH://server.sample.mo/app/bin \n customupload abc.txt" p = subprocess.Popen(some_command, stdout=subprocess.PIPE, shell=True) (output, err) = p.communicate() #This makes the wait possible p_status = p.wait() #This will give you the output of the command being executed print "Command output: " + output
źródło
Wymuś,
popen
aby nie kontynuować, dopóki wszystkie dane wyjściowe nie zostaną odczytane, wykonując:źródło
Niech polecenie, które próbujesz przekazać, będzie
os.system('x')
następnie zamieniasz to w oświadczenie
t = os.system('x')
teraz python będzie czekał na dane wyjściowe z wiersza poleceń, aby można je było przypisać do zmiennej
t
.źródło
To, czego szukasz, to
wait
metoda.źródło
wait
jest metodąsubprocess
klasy.wait () działa dobrze dla mnie. Podprocesy p1, p2 i p3 są wykonywane jednocześnie. Dlatego wszystkie procesy są wykonywane po 3 sekundach.
import subprocess processes = [] p1 = subprocess.Popen("sleep 3", stdout=subprocess.PIPE, shell=True) p2 = subprocess.Popen("sleep 3", stdout=subprocess.PIPE, shell=True) p3 = subprocess.Popen("sleep 3", stdout=subprocess.PIPE, shell=True) processes.append(p1) processes.append(p2) processes.append(p3) for p in processes: if p.wait() != 0: print("There was an error") print("all processed finished")
źródło
Myślę, że process.communicate () byłby odpowiedni do wyjścia o małym rozmiarze. W przypadku większej wydajności nie byłoby to najlepsze podejście.
źródło