Podproces moduł będzie pomóc.
Rażąco trywialny przykład:
>>> import subprocess
>>> subprocess.call(['./test.sh']) # Thanks @Jim Dennis for suggesting the []
0
>>>
Gdzie test.sh
jest prosty skrypt powłoki i 0
jego wartość zwracana dla tego uruchomienia.
chmod +x script.sh
. Uwaga: skrypt.sh jest symbolem zastępczym skryptu, zamień go odpowiednio.Istnieje kilka sposobów korzystania z
os.popen()
(przestarzałych) lub całegosubprocess
modułu, ale takie podejściejest jednym z najłatwiejszych.
źródło
subprocess
możesz zarządzać rurami wejścia / wyjścia / błędów. Jest to również lepsze, gdy masz wiele argumentów -os.command()
będziesz musiał utworzyć całą linię poleceń ze znakami specjalnymi, zsubprocess
prostą listą argumentów. Ale dla prostych zadańos.command()
może być po prostu wystarczające.The subprocess module provides more powerful facilities for spawning new processes and retrieving their results; *using that module is preferable to using this function.*
Jeśli chcesz przekazać pewne parametry do skryptu powłoki, możesz użyć metody shlex.split () :
zw
test.sh
tym samym folderze:Wyjścia:
źródło
Zakładając, że test.sh to skrypt powłoki, który chciałbyś wykonać
źródło
Użyj modułu podprocesu, jak wspomniano powyżej.
Używam tego w ten sposób:
źródło
Korzystam z języka Python 3.5 i subprocess.call (['./ test.sh']) nie działa dla mnie.
Daję ci trzy rozwiązania, w zależności od tego, co chcesz zrobić z produktem.
1 - skrypt wywołania. Zobaczysz wyjście w swoim terminalu. wyjście jest liczbą.
2 - wywołanie i zrzut zrzutu oraz błąd w łańcuch. Nie zobaczysz wykonania w swoim terminalu, dopóki nie wydrukujesz (standardowe wyjście). Shell = Prawda, ponieważ argument w Popen nie działa dla mnie.
3 - wywołaj skrypt i zrzuć polecenia echa temp.txt w pliku temp_file
Nie zapomnij rzucić okiem na podproces dokumentu
źródło
subprocess.call
. Proces potomny zostanie zablokowany, jeśli wygeneruje wystarczającą moc wyjściową do potoku, aby wypełnić bufor potoku systemu operacyjnego, ponieważ rury nie są odczytywane.Moduł podprocesu jest dobrym modułem do uruchamiania podprocesów. Możesz go użyć do wywoływania poleceń powłoki w następujący sposób:
Możesz zobaczyć jego dokumentację tutaj.
Jeśli masz skrypt napisany w pliku .sh lub długim ciągu, możesz użyć modułu os.system. Jest to dość proste i łatwe do wywołania:
To polecenie uruchomi skrypt raz, do końca, i zablokuje, dopóki nie zakończy działania.
źródło
W przypadku, gdy skrypt ma wiele argumentów
Dane wyjściowe podadzą kod statusu. Jeśli skrypt uruchomi się pomyślnie, da 0 w przeciwnym razie liczbę całkowitą niezerową.
Poniżej znajduje się skrypt powłoki test.sh.
źródło
Podproces jest dobry, ale niektórzy ludzie mogą bardziej lubić skrypty . Skrypty mają więcej zestawów metod wysokiego poziomu, takich jak shell.call (args) , path.rename (nowa_nazwa) i path.move (src, dst) . Skrypty oparte są na podprocesie i innych.
Dwie wady skryptu:
źródło
Wiem, że jest to stara sprawa, ale natknąłem się niedawno i skończyło się misguiding mnie od podproces API jak zmieniło od Pythona 3.5.
Nowym sposobem wykonywania zewnętrznych skryptów jest
run
funkcja, która uruchamia polecenie opisane przez args. Czeka na wykonanie polecenia, a następnie zwraca instancję CompletedProcess.źródło
Jeśli plik skryptu powłoki nie ma uprawnień do wykonywania, zrób to w następujący sposób.
źródło
Wypróbuj następujące kody:
źródło