Próbuję znaleźć sposób, aby sprawdzić istnienie polecenia powłoki przed jego wykonaniem.
Na przykład wykonam polecenie ack-grep. Więc próbuję zrobić:
importuj podproces
z podprocesu import PIPE
cmd_grep = subprocess.Popen ([„ack-grep”, „--no-color”, „--max-count = 1”, „--no-group”, „def run_main”, „../cgedit/”], stdout = PIPE, stderr = PIPE)
Niż jeśli wykonam
cmd_grep.stderr.read ()
Otrzymuję „jak wyjście”. Ale na mojej ścieżce nie ma polecenia ack-grep. Dlaczego więc Popen nie wyświetla komunikatu o błędzie w mojej zmiennej .stderr?
Czy jest też łatwiejszy sposób na robienie tego, co próbuję?
Odpowiedzi:
Możesz użyć modułu podprocesu w Pythonie 3 lub modułu poleceń dla Pythona 2 w następujący sposób:
Następnie sprawdź wartość
status
.Przykłady ze strony:
źródło
nie możesz jakoś użyć polecenia „który”? które polecenie automatycznie wykonuje wyszukiwanie aplikacji na ścieżkach. Myślę, że wystarczy wywołać to polecenie i podać nazwę polecenia, które chcesz wyszukać, a następnie przeanalizować wyniki.
źródło
Do takich sytuacji używam:
Następnie możesz zrobić coś takiego:
źródło
W końcu zostawiłem to działające w ten sposób:
źródło
To powinno Ci pomóc:
Proces myślowy ......... Użyłem tego rozwiązania, aby rozpocząć:
Ale to spowodowało konkretną odpowiedź tylko z systemów Linux.
Zwraca ścieżkę do pliku wykonywalnego po wywołaniu „ack-grep” lub None, jeśli nic nie jest wywoływane.
źródło
ack-grep
porównaniu zgrep
, a (2) pokazał kod do użycia polecenia, którego chcesz użyć, w porównaniu z użyciem kreacji zastępczej.