Sto scrivendo una funzione che utilizza pandoc in R attraverso la riga di comando. Come posso usare R per verificare se pandoc è installato (suppongo anche che dovrebbe essere sul percorso che potrebbe essere un problema per gli utenti di Windows)?controllare se è installato un programma
risposta
Questo suggerimento si basa interamente sulla mia esperienza personale con questa domanda che RStudio non sembra leggere nel mio file di Ubuntu sul mio file .bashrc
. Ho installato Pandoc utilizzando il metodo cabal install pandoc
descritto con here poiché c'erano le funzionalità necessarie per le versioni più recenti di Pandoc di quelle disponibili con il gestore di pacchetti di Ubuntu. L'esecuzione di R dal terminale potrebbe rilevare Pandoc come previsto utilizzando Sys.which
, ma quando si utilizza RStudio, non è stato possibile. Non ho idea se questo è un problema con gli utenti di Windows o no però!
Un'alternativa/soluzione in questo caso è in realtà la creazione di un vettore di percorsi tipici in cui si prevede l'eseguibile Pandoc da trovare (sotto la presunzione che molti utenti in realtà non Futz giro con dove installano programmi) . Queste informazioni sono, di nuovo, disponibili nella pagina di installazione collegata sopra, più il tipico percorso C:\\PROGRA~1\\...
per Windows. Così, si potrebbe avere qualcosa di simile a quanto segue come i percorsi 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
che può essere utilizzato con Sys.which()
(ad esempio, Sys.which(myPaths)
) e alcune delle altre idee già condivise.
- Se la prima opzione è abbinata in modo univoco, non c'è alcun problema: è possibile utilizzare direttamente le chiamate di sistema a Pandoc.
- Se una delle altre opzioni è abbinata in modo univoco, è possibile scrivere le proprie funzioni in modo tale da incollare il percorso completo dell'eseguibile nella chiamata di sistema anziché solo "pandoc".
- Se la prima opzione e una qualsiasi delle altre opzioni sono abbinate, è sufficiente selezionare la prima opzione e procedere.
- Se nessuno corrisponde, richiedere all'utente il percorso per l'installazione di Pandoc o fornire un messaggio su come installare Pandoc.
questo approccio funziona e non richiede all'utente di riconfigurare le cose. Ho lavorato sia su Linux che su Windows +1 Non mi hai dato quello che ti ho chiesto per capire di cosa avevo bisogno. –
+1! per condividere la tua esperienza! – agstudy
@agstudy, prego. Sia le tue risposte che quelle di Dason sono state in realtà le prime a venire in mente (avevo fatto gli stessi suggerimenti a una domanda simile [qui] (http://stackoverflow.com/a/14376517/1270695) ma quando l'ho provato prima postando la mia risposta, non ha funzionato, quindi il mio bisogno di scavare un po 'di più;) – A5C1D2H2I1M1N2O1R2T1
Suppongo che sia possibile utilizzare Sys.which
e verificare se il risultato è una stringa vuota.
pandoc.location <- Sys.which("pandoc")
if(pandoc.location == ""){
print("pandoc not available")
}else{
print("pandoc available")
}
Funziona sulla mia finestra di Windows ma 'Sys.which (" firefox ")' restituisce '" "', ma 'system (" open firefox ")' avvia un browser Firefox ... Mi chiedo perché. –
Sarebbe stato anche il mio suggerimento (l'ho suggerito anche a Tyler per Ghostscript [qui] (http://stackoverflow.com/a/14376517/1270695), ma per qualche motivo non funziona sul mio sistema. Forse perché era un'installazione di cabala? Ma non sono sicuro ... – A5C1D2H2I1M1N2O1R2T1
Buon punto.Non ho davvero provato questo su Windows. Mi chiedo se pandoc potrebbe essere un po 'diverso, dal momento che è principalmente una utility da riga di comando – Dason
Non ho Pandoc da installare, ma in generale ho test se un programma è installato in questo modo:
pandoc.installed <- system('pandoc -v')==0
Ad esempio, per verificare se Java è installato:
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
la soluzione era esattamente quello che ho chiesto grazie. Ananda ha capito cosa avevo veramente bisogno quando non sapevo di averne bisogno. –
- 1. Controllare se è installato un qualsiasi lettore PDF
- 2. Come verificare se un programma è installato su sistema Windows
- 3. Verifica se Skype è installato
- 4. programma per controllare se lo scoping è lessicale o dinamico
- 5. Controlla se un pacchetto è installato
- 6. Bootstrapper: Controllare se la versione MSI è installato prima di eseguire
- 7. Controllare se un char è un newline
- 8. Controllare che Solidworks sia installato?
- 9. Come determinare se il provider VFPOLEDB è installato/registrato?
- 10. Come verificare con C# in cui è installato un programma
- 11. Come verificare se è installato un modulo Perl?
- 12. Come posso verificare se un MSI particolare è installato?
- 13. Controllare se un file è un'immagine
- 14. Controllare se un tipo è una mappa
- 15. Controllare se è stato definito un simbolo
- 16. Controllare se una variabile è un array
- 17. Controllare se un oggetto è NSInteger
- 18. Come rimuovere un programma installato con distutils?
- 19. Come fallire correttamente se .NET non è installato?
- 20. Controllare se RecyclerView è scorrevole
- 21. controllare se NSNumber è vuoto
- 22. Controllare se NSDictionary è vuoto
- 23. C# controllare se una directory è nascosta?
- 24. Verificare se CURL è installato localmente?
- 25. Download dell'app se l'intento non è installato
- 26. Controllare che Adobe Reader sia installato (C#)?
- 27. Come verificare se MongoDB è installato correttamente
- 28. Verificare se IIS è installato o no?
- 29. Rileva se Mod_Security è installato con PHP?
Testare entrambe le soluzioni su computer Windows che avevano pandoc e non avevano pandoc ... sembra che funzionino entrambi. Non so però quale sia la soluzione più robusta. – Dason
Un vantaggio che posso vedere dell'approccio 'system ('pandoc-v')' su 'Sys.which' è che verifica che il programma non sia solo installato, ma possa essere effettivamente eseguito. –
@BrianDiggs geniale !! – agstudy