Piszę funkcję, która używa pandoc w R za pomocą wiersza polecenia. Jak mogę użyć R do sprawdzenia, czy zainstalowany jest pandoc (zakładam również, że musiałby on znajdować się na ścieżce, która może być problemem dla użytkowników systemu Windows)?Sprawdź, czy program jest zainstalowany
Odpowiedz
Ta sugestia jest całkowicie oparta na moich osobistych doświadczeniach z tym pytaniem, które nie są w stanie odczytać tego, co znajduje się w moim pliku .bashrc
w systemie Ubuntu. Zainstalowałem Pandoc przy użyciu metody opisanej jako here, ponieważ były funkcje, których potrzebowałem z nowszych wersji Pandoc, niż były dostępne w menedżerze pakietów Ubuntu. Uruchamianie R z terminala może wykryć Pandoc zgodnie z oczekiwaniami przy użyciu Sys.which
, ale przy korzystaniu z RStudio, nie mógł tego zrobić. Nie mam pojęcia, czy jest to problem z użytkownikami systemu Windows, czy nie!
Alternatywą/obejście jest w tym przypadku rzeczywiście tworząc wektor typowych ścieżek, gdzie można oczekiwać wykonywalny Pandoc można znaleźć (pod domniemania, że wielu użytkowników nie bardzo futz wokół z gdzie oni instalować programy) . Te informacje są ponownie dostępne na stronie instalacji, do której link został dołączony powyżej, oraz typowej ścieżce C:\\PROGRA~1\\...
dla systemu Windows. Tak więc, może mieć coś jak następuje jako ścieżki do Pandoc:
myPaths <- c("pandoc",
"~/.cabal/bin/pandoc",
"~/Library/Haskell/bin/pandoc",
"C:\\PROGRA~1\\Pandoc\\bin\\pandoc")
# Maybe a .exe is required for that last one?
# Don't think so, but not a regular Windows user
które można wykorzystać przy Sys.which()
(na przykład Sys.which(myPaths)
) oraz niektórych innych pomysłów już udostępnionych.
- Jeśli pierwsza opcja jest wyjątkowo dopasowane, to nie ma problemu: można użyć systemu wzywa do Pandoc bezpośrednio.
- Jeśli któraś z pozostałych opcji jest jednoznacznie dopasowana, możesz napisać swoje funkcje w taki sposób, że wkleisz pełną ścieżkę do pliku wykonywalnego w wywołaniu systemowym, zamiast tylko "pandoc".
- Jeśli pierwsza opcja i jedna z pozostałych opcji są dopasowane, możesz po prostu wybrać pierwszą opcję i kontynuować.
- Jeśli żadna nie jest dopasowana, zapytaj użytkownika o ścieżkę do instalacji Pandoc lub podaj komunikat, jak zainstalować Pandoc.
To podejście działa i nie wymaga od użytkownika rekonfigurowania rzeczy. Pracowałem zarówno na Linuksie, jak i na Windowsie. Nie dałeś mi tego, o co cię poprosiłem, zorientowałem się, czego potrzebuję. –
+1! za dzielenie się wrażeniami! – agstudy
@agstudy, nie ma za co. Odpowiedzi zarówno twoja, jak i Dasona były pierwszą, która przyszła mi do głowy (podoba mi się podobne pytanie [tutaj] (http://stackoverflow.com/a/14376517/1270695)), ale kiedy wypróbowałem to wcześniej zamieszczając moją odpowiedź, to nie zadziałało, stąd moja potrzeba dalszego wykopania;) – A5C1D2H2I1M1N2O1R2T1
Przypuszczam, że można użyć wartości Sys.which
i sprawdzić, czy wynik jest pusty.
pandoc.location <- Sys.which("pandoc")
if(pandoc.location == ""){
print("pandoc not available")
}else{
print("pandoc available")
}
Działa to na moim Windowsie, ale 'Sys.which (" firefox ")' zwraca '" "', ale 'system (" open firefox ")' uruchamia przeglądarkę Firefox ... Zastanawiam się, dlaczego. –
Byłbym też moją sugestią (ja też zasugerowałem to Tylerowi dla Ghostscript [tutaj] (http://stackoverflow.com/a/14376517/1270695)), ale z jakiegoś powodu nie działa z moim systemem. Może dlatego, że to była instalacja kabalowa? Ale nie jestem pewien ... – A5C1D2H2I1M1N2O1R2T1
Dobra uwaga.Tak naprawdę nie testowałem tego w systemie Windows. Zastanawiam się, czy pandoc może być trochę inny, ponieważ jest to głównie narzędzie wiersza poleceń. – Dason
nie mam pandoc do zainstalowania, ale generalnie przetestować I jeśli program jest zainstalowany tak:
pandoc.installed <- system('pandoc -v')==0
Na przykład aby sprawdzić, czy java jest zainstalowana:
java.installed <- system('java -version') ==0
java version "1.7.0_10"
Java(TM) SE Runtime Environment (build 1.7.0_10-b18)
Java HotSpot(TM) 64-Bit Server VM (build 23.6-b04, mixed mode)
> java.installed
[1] TRUE
Twoje rozwiązanie było dokładnie tym, o co prosiłem, dziękuję. Ananda zorientował się, czego naprawdę potrzebowałem, kiedy nie wiedziałem, że tego potrzebuję. –
- 1. Sprawdź, czy pakiet jest zainstalowany.
- 2. Sprawdź, czy Skype jest zainstalowany
- 3. Sprawdź, czy użytkownik ma zainstalowany program Facebook Messenger. IOS 9
- 4. Sprawdź, czy cURL jest zainstalowany lokalnie?
- 5. Sprawdź, czy patogen jest zainstalowany w vimrc
- 6. Python/win32com - Sprawdź, czy program jest otwarty
- 7. Sprawdź MSWord jest zainstalowany w systemie
- 8. Sprawdź, czy zainstalowany jest serwer SQL (dowolna wersja)?
- 9. inicjującego: Sprawdź, czy wersja MSI jest zainstalowany przed uruchomieniem
- 10. klient socket.io: jak ustalić, czy program obsługi jest już zainstalowany
- 11. Jak sprawdzić, czy jest zainstalowany program asp.net mvc 3?
- 12. Jak ustalić, czy zainstalowany jest program wykonawczy VSTO 2010?
- 13. Czy zainstalowany jest Adobe Reader (C#)?
- 14. Sprawdź, czy jakiś program exe jest uruchomiony w oknach
- 15. Gdzie jest zainstalowany program MSBuild.exe w systemie Windows, jeśli jest zainstalowany przy użyciu narzędzia BuildTools_Full.exe?
- 16. Sprawdź, czy program istnieje ze skryptu pythonowego
- 17. Sprawdź program debugowania
- 18. Jak sprawdzić w C#, gdzie program jest zainstalowany
- 19. Sprawdź, czy jest fałsz.
- 20. Sprawdź, czy certyfikat jest certyfikatem wieloznacznym.
- 21. Jak sprawdzić, czy Suhosin jest zainstalowany?
- 22. Jak sprawdzić, czy moduł powershell jest zainstalowany?
- 23. Wykryj, czy Mod_Security jest zainstalowany w PHP?
- 24. Kod X 6 - iOS 8: programowo sprawdź, czy widok jest zainstalowany
- 25. Jak programowo ustalić, czy zainstalowany jest program Visual C++ Runtime 8.0?
- 26. Sprawdź, czy aplikacja jest zainstalowana w rejestrze
- 27. Sprawdź, czy obiekt jest pusty
- 28. Sprawdź, czy przeglądarka jest zajęta
- 29. Sprawdź, czy typ jest słownik
Testowanie obu rozwiązań na komputerach z systemem Windows, które miały pandoc i nie miały pandoc ... to wygląda na pracę. Nie wiem, które rozwiązanie jest bardziej niezawodne. – Dason
Jedną z zalet, jakie widzę w podejściu 'system ('pandoc - v')' w stosunku do 'Sys.which' jest to, że sprawdza, czy program jest nie tylko zainstalowany, ale może zostać uruchomiony. –
@BrianDiggs genialny !! – agstudy