2014-04-20 13 views
10

A volte questo funziona, a volte no. Sembra dipendere dal fatto che il sistema debba richiedere una password. La domanda più generale sarebbe: c'è un modo per l'utente di fornire input a un comando shell da R?Esegui un comando di sistema come sudo da R?

system('sudo npm install gitbook -g') 

Si noti che il mio caso specifico sta tentando di installare un modulo node.js. Tuttavia, penso che tu possa replicarlo usando un comando più banale.

system('sudo mkdir testdir') 

Si prega di notare che questo a volte lavorare a seconda se sudo si richiede di inserire nuovamente la password. Grazie.

+1

Questa non è una soluzione generale, ma è possibile fare affidamento su 'gksudo' (un'interfaccia grafica per sudo). – Jealie

+2

Suggerisco di dare un'occhiata a 'man sudo', l'opzione -A potrebbe funzionare per voi. –

+0

Come stai correndo R? Nel mio terminale mi viene richiesta la password se ne ho bisogno eseguendo sudo tramite 'system' – Dason

risposta

8

posso suggerire due diverse soluzioni:

  1. Usa gksudo, che richiederà all'utente di inserire una password in un'interfaccia grafica. Ecco come funziona in pratica:

    system('gksudo ls')

    • PRO:

      • E 'sicuro, non c'è bisogno di gestire la password da soli.
      • ....
    • CONTRO:

      • non funzionerà senza un'interfaccia grafica.
      • gksudo è stato installato di default con i marchi linux che ho provato, ma YMMV: forse alcuni utenti non ce l'hanno.
      • ....
  2. chiederà la password utente in R, e fornirle le adeguate sudo opzioni: -k di richiedere sempre la password e -S di accettare la password dalla input standard. Ecco come funziona in pratica:

    system('sudo -kS ls',input=readline("Enter your password: "))

    • PRO:

      • Essa non si basa su qualsiasi altro programma.
      • ....
    • CONTRO:

      • Non mi piace l'idea che una password viene manipolato da R: sembra una cattiva idea.
      • ....

Oltre a questo, non sono a conoscenza in qualsiasi modo per comunicare in modo interattivo con un programma avviato da R.

Problemi correlati