Gå til innhold

Automatisk fylle inn command line input requests


Anbefalte innlegg

Skrevet

Hei

 

La oss anta at jeg har et python-script som skal kjøre en rekke kommandoer. Dette er ganske straight forward.

 

Problemet er bare at istedenfor at disse programmene tar input som parameter så _spør_ de bruker om input. Ved request om input henger programmet til den mottar input+linjeskift. Er det noen måte jeg ved hjelp av python automatisk kan fylle ut slike input requests? Jeg har en anelse om at løsningen innebærer pipes, men dessverre kan jeg ikke nok til å vite helt hvor jeg skal starte.

 

eksempel:

 

"skriv inn navn: " <-- henger her til bruker skriver input og trykker enter

 

Takker så mye for evt svar!

Videoannonse
Annonse
Skrevet

Du trenger ikke Python til dette, bruk redirect av input i shellet ditt. I bash bruker du < til input og > til output. Så hvis du har kommandoene i en fil 'input' kan du kjøre:

python mittscript.py < input

Skrevet
Du trenger ikke Python til dette, bruk redirect av input i shellet ditt. I bash bruker du < til input og > til output. Så hvis du har kommandoene i en fil 'input' kan du kjøre:

python mittscript.py < input

 

Hei

 

Det er en del av et større python script som først ber brukeren om input, for så å bruke denne til å kjøre en rekke andre kommandoer. Hensikten er å slippe å skrive inn samme input ganger til forskjellige kommandoer. Derfor blir det ikke så enkelt å bare pipe det på måten du beskriver.

 

Videre ber hver kommando om flere inputs (og blocker hver gang).

Skrevet
Videre ber hver kommando om flere inputs (og blocker hver gang).

Det har ingenting å si, skriv første kommando på første linje, andre kommando på andre linje osv. Men hvis du etter litt automatisk inputting plutselig vil gjøre det manuelt så fungerer det vel ikke, nei.

Skrevet (endret)

Du kan bruke os.popen2, men tviler på at den gir deg hva du er ute etter.

 

stdin, stdout = os.popen2('python dittscript.py')

stdin.write('input')
stdin.close()

for line in stdout.readlines():
print line

Endret av explosif
Skrevet

Tenker du kanskje på raw_input ?

 

import getpass
name = raw_input('Ditt brukarnamn:')
pass = getpass.getpass('Passord:')
print 'Hei, %s! Ditt passord er %s' % (name, pass)

Skrevet (endret)

Nei, jeg tenkte på explosif sitt forslag. Det ville fungert hvis det ikke var for at programmet jeg ønsket å gjøre det på (cryptsetup) ikke tåler input fra script...Skulle lage et minimalistisk brukergrensesnitt for å endre encryption password på en luks-kryptert disk.

 

Fant dessverre ingen god måte å omgå den begrensningen og la derfor hele prosjektet på is. Synd ettersom luks-kommandoene er vanvittig tungvint å bruke.

Endret av invictus
Skrevet
Nei, jeg tenkte på explosif sitt forslag. Det ville fungert hvis det ikke var for at programmet jeg ønsket å gjøre det på (cryptsetup) ikke tåler input fra script...

 

Hva mener du med "ikke tåler input fra script"? cryptsetup tar da vitterlig input fra f.eks. pipe.

 

Fant dessverre ingen god måte å omgå den begrensningen og la derfor hele prosjektet på is. Synd ettersom luks-kommandoene er vanvittig tungvint å bruke.

 

Ehhh... hvilken del av cryptsetup luksAddKey <device> er komplisert?

Opprett en konto eller logg inn for å kommentere

Du må være et medlem for å kunne skrive en kommentar

Opprett konto

Det er enkelt å melde seg inn for å starte en ny konto!

Start en konto

Logg inn

Har du allerede en konto? Logg inn her.

Logg inn nå
  • Hvem er aktive   0 medlemmer

    • Ingen innloggede medlemmer aktive
×
×
  • Opprett ny...