These are chat archives for dbwebb-se/python

9th
Oct 2016
Christinefred
@Christinefred
Oct 09 2016 11:34
Ok, ska prova med arg. Jag förstår inte den här raden i mynameis "hvsd:r:o:", finns det någon tutorial eller text om det?
Christinefred
@Christinefred
Oct 09 2016 11:40
Jag förstår inte heller varför global variabel inte är accepterad.
AndreasArne
@AndreasArne
Oct 09 2016 12:31
@Christinefred Kenneth har spelat in ett youtube-klippp där han går igenom getops, https://www.youtube.com/watch?v=SFE_X7fzrdg&index=26&list=PLKtP9l5q3ce93pTlN_dnDpsTwGLCXJEpd
titta på det och se om det hjälper
Vad menar du med att global variable inte är accepterad?
Christinefred
@Christinefred
Oct 09 2016 13:32
global är understruken med ett rött streck och det säger warning using global statement i mynameis filen
Jag är så förvirrad eftersom jag får functionen att fungera med opt men inte ping som argument
AndreasArne
@AndreasArne
Oct 09 2016 13:33
@Christinefred det är meningen/vi vill att ni ska använda er av globala variabler i uppgiften
Christinefred
@Christinefred
Oct 09 2016 13:34
Men varför ger det en warning
AndreasArne
@AndreasArne
Oct 09 2016 13:34
det vet jag inte, är det i din fil eller mos's fil?
kan du dela din opts kod via codeshar eller någon sådan sida
Christinefred
@Christinefred
Oct 09 2016 13:46
https://codeshare.io/XDMoR Jag har klistrat in min kod
jag kallade functionen hope för att jag hoppades att jag klarar av den
AndreasArne
@AndreasArne
Oct 09 2016 13:48
haha det ska vi nog klara av att se till
i din kod på rad 198, i codeshare, har du lagt in ping som ett options
ping är ett kommando
i getopt functionen, "hvsd:o:p:", ["ping","help".....] ska du definera options
options är settings för ditt program hur det ska bete sig och kommandon säger programmet vad det ska göra
kommandon behöver du inte definera i getopt funktionen utan allt som du inte har definerat i den funktionen kommer behandlas som kommandon
kommandona returneras till args variabeln
AndreasArne
@AndreasArne
Oct 09 2016 13:53
opts, args = getopt.getopt(sys.argv[1:], "hv", ["help", "silent"])
till ett program med den koden kan man skicka med options -h, -v, --help och --silent
Christinefred
@Christinefred
Oct 09 2016 13:55
Jag har försökt att definera det som ett argument så här if args[0] == 'ping':
    #     #hope()
    #     #url = args[1]
    #     OUTPUT = args[1]
    #
    #     if VERBOSE:
    #         print("Setting OUTPUT to ", OUTPUT)
    # #hope() 
men det gick inte
AndreasArne
@AndreasArne
Oct 09 2016 13:55
det är för att du har lagt det som ett option och därför kommer det ligga i opts variablen och inte args
testa ta bort "p:" och "ping="
Christinefred
@Christinefred
Oct 09 2016 13:56
ok
AndreasArne
@AndreasArne
Oct 09 2016 13:56
från getopt funktionen
naal16
@naal16
Oct 09 2016 14:00
Hej! Jag försöker lösa marvin3 med att läsa in json-fil med citat, men lyckas inte. Det här är min kod https://codeshare.io/yXJu1 och json-filen har jag strukturerat såhär: https://codeshare.io/Z2ulK
Hinten säger såhär: Traceback (most recent call last):
File "main.py", line 15, in <module>
data = json.loads(open("quotes.json").read())
File "/usr/local/Cellar/python3/3.5.2_1/Frameworks/Python.framework/Versions/3.5/lib/python3.5/json/init.py", line 319, in loads
return _default_decoder.decode(s)
File "/usr/local/Cellar/python3/3.5.2_1/Frameworks/Python.framework/Versions/3.5/lib/python3.5/json/decoder.py", line 339, in decode
obj, end = self.raw_decode(s, idx=_w(s, 0).end())
File "/usr/local/Cellar/python3/3.5.2_1/Frameworks/Python.framework/Versions/3.5/lib/python3.5/json/decoder.py", line 357, in raw_decode
raise JSONDecodeError("Expecting value", s, err.value) from None
json.decoder.JSONDecodeError: Expecting value: line 1 column 1 (char 0)
AndreasArne
@AndreasArne
Oct 09 2016 14:04
@naal16 Har du testat med att läsa in data först till en variabel och sen göra json.loads på den?
@Christinefred funkar det?
Christinefred
@Christinefred
Oct 09 2016 14:05
jag fick det här Traceback (most recent call last):
File "marvin", line 295, in <module>
main()
File "marvin", line 285, in main
hope()
File "marvin", line 184, in hope
with open(OUTPUT, "r") as fhand:
TypeError: invalid file: None
Nej,jag är förvirrad
AndreasArne
@AndreasArne
Oct 09 2016 14:06
ok, är du med på att du har kommit längre i alla fall?
i din elif där du kollar om args[0] är ping
Christinefred
@Christinefred
Oct 09 2016 14:07
Ja och jag vet att min function fungerar men att sätta agumentet är svårt för mig
AndreasArne
@AndreasArne
Oct 09 2016 14:07
sätte du OUTPUT=arg
jag ser även att nedanför din forloop har du kommenterat ut en if sats för args
Christinefred
@Christinefred
Oct 09 2016 14:07
Så jag ska behålla min elif och if är ping?
AndreasArne
@AndreasArne
Oct 09 2016 14:08
ta bort din elif där du kollar ping
och använd istället din utkommenterade if-sats
du vill kolla kommandon efter att du är klar med options, alltså efter din for-loop
kan du dela din nya kod? Så¨jag hänger med i svängarna :P
Christinefred
@Christinefred
Oct 09 2016 14:09
Jag ska prova om en stund det känns så bra att få hjälp, jag har suttit ett par dagar med det här.
Christinefred
@Christinefred
Oct 09 2016 14:20
if args[0] == 'ping':
        OUTPUT = args
    #
        if VERBOSE:
            print("Setting OUTPUT to ", OUTPUT)
jag satte den här utanför loopen
Men funktionen skriver inte ut en ny fil
AndreasArne
@AndreasArne
Oct 09 2016 14:22
kan du uppdatera din kod i en codeshare så jag ser allt?
Christinefred
@Christinefred
Oct 09 2016 14:22
Ja
AndreasArne
@AndreasArne
Oct 09 2016 14:29
tack
på rad 234 i din if-sats sätter du output=args
output har du ju redan satt uppe i din elif för -o, --ouput
Christinefred
@Christinefred
Oct 09 2016 14:30
@AndreasArne @AndreasArne
AndreasArne
@AndreasArne
Oct 09 2016 14:31
@Christinefred ja?
Christinefred
@Christinefred
Oct 09 2016 14:31
Jag vet inte vad som hände
AndreasArne
@AndreasArne
Oct 09 2016 14:31
hehe
men du ditt programm krashar för att du sätter output= arg
men arg finns in där
arg, finns bara i din forloop
Christinefred
@Christinefred
Oct 09 2016 14:32
Vad ska jag sätta?
AndreasArne
@AndreasArne
Oct 09 2016 14:32
dessutom vill du inte sätta output där för det gör du redan i din forloop
utan det du vill göra här är ju att pinga en hemsida
så du vill ju kalla på din hope funktion
Christinefred
@Christinefred
Oct 09 2016 14:33
det ska ju vara ping=https://dbwebb.se/humans.txt i kommandot?
AndreasArne
@AndreasArne
Oct 09 2016 14:34
du ska köra programmet med "marvin-cli.py ping https://dbwebb.se/humans.txt"
då finns ping i args[0]
och url:en i args[1]
så om args[0] == ping
vill du kalla på hope och skicka med args[1]
Christinefred
@Christinefred
Oct 09 2016 14:35
url == args1?
AndreasArne
@AndreasArne
Oct 09 2016 14:36
ne
if args[0] =="ping": hope(args[1])
Christinefred
@Christinefred
Oct 09 2016 14:36
OUTPUT=True
ska prova Tack
AndreasArne
@AndreasArne
Oct 09 2016 14:40
@naal16 funkade det?
Christinefred
@Christinefred
Oct 09 2016 14:40
Nej
Too many arguments
naal16
@naal16
Oct 09 2016 14:41
@AndreasArne Vet inte om jag förstod dig rätt, var det såhär du menar med "Har du testat med att läsa in data först till en variabel och sen göra json.loads på den" data = open("quotes.json", "r")
datan = json.loads(data)
AndreasArne
@AndreasArne
Oct 09 2016 14:42
jaha, jag glömnde kolla på din hope funktion, ser nu att du har satt url ="....." i din funktion så då beghöver du bara kalla på hope()
du behöver inte skicka med args1
@naal16 ja, det var så jag menade
naal16
@naal16
Oct 09 2016 14:43
ok vad bra! Men hinten säger nu: TypeError: the JSON object must be str, not 'TextIOWrapper' ???
AndreasArne
@AndreasArne
Oct 09 2016 14:43
data = open("quotes.json", "r").read()
lägg till .read()
naal16
@naal16
Oct 09 2016 14:49
ok! Funkar fortfarande inte, förstår inte vad hinten menar, är det nåt fel på min json? Traceback (most recent call last):
File "main.py", line 16, in <module>
datan = json.loads(data)
File "/usr/local/Cellar/python3/3.5.2_1/Frameworks/Python.framework/Versions/3.5/lib/python3.5/json/init.py", line 319, in loads
return _default_decoder.decode(s)
File "/usr/local/Cellar/python3/3.5.2_1/Frameworks/Python.framework/Versions/3.5/lib/python3.5/json/decoder.py", line 339, in decode
obj, end = self.raw_decode(s, idx=_w(s, 0).end())
File "/usr/local/Cellar/python3/3.5.2_1/Frameworks/Python.framework/Versions/3.5/lib/python3.5/json/decoder.py", line 357, in raw_decode
raise JSONDecodeError("Expecting value", s, err.value) from None
json.decoder.JSONDecodeError: Expecting value: line 1 column 1 (char 0)
AndreasArne
@AndreasArne
Oct 09 2016 14:50
@naal16 det ser ju lite ut så, men enligt http://jsonlint.com/ så ska det vara vara rätt
naal16
@naal16
Oct 09 2016 14:50
jo körde också den i en validator så fattar inte heller
kanske ska ta bort id och bara ha med citaten
AndreasArne
@AndreasArne
Oct 09 2016 14:51
om du gör print på data, innehåller den rätt saker?
naal16
@naal16
Oct 09 2016 14:57
Nej, nu när jag tog bort random.choice och bara körde print(datan) får jag inte ens upp menyn, och så står det data.close()
AttributeError: 'str' object has no attribute 'close'
AndreasArne
@AndreasArne
Oct 09 2016 15:00
det är för att när di gör .read() returnerar du hela filens innehåll som en sträng och inte objektet som är kopplat till filen
med andra ord kan du inte stänga den
naal16
@naal16
Oct 09 2016 15:01
nähä ok!
AndreasArne
@AndreasArne
Oct 09 2016 15:02
@Christinefred hur går det?
Christinefred
@Christinefred
Oct 09 2016 15:02
Nej
AndreasArne
@AndreasArne
Oct 09 2016 15:03
hehe ok
samma fel eller något annat?
Christinefred
@Christinefred
Oct 09 2016 15:04
Det bara säger hur lång tid det tog för scriptet
AndreasArne
@AndreasArne
Oct 09 2016 15:06
kan du uppdatera codeshare igen?
Christinefred
@Christinefred
Oct 09 2016 15:07
AndreasArne
@AndreasArne
Oct 09 2016 15:08
får du inte utskriften "we got this far!!!"?
Christinefred
@Christinefred
Oct 09 2016 15:09
Nej
Det är varför jag la in den för attse hur det funkar
AndreasArne
@AndreasArne
Oct 09 2016 15:10
rad 218
kallar du på hope() men du skickar inte med något argument, medans på rad 130 står det att du förväntar dig att det ska skicas med en url
när jag sa att du inte skulle skicka med args1 så enligt min kod skulle man inte skicka med det till hope
men ser nu att med denna koden förväntas att args1 skickas med
jag ändrade rad 218 till hope(args[1])
då funkade det för mig
Christinefred
@Christinefred
Oct 09 2016 15:15
Vad för kommand skickar du in?
AndreasArne
@AndreasArne
Oct 09 2016 15:16
python3 marvin-cli.py ping https://dbwebb.se/humans.txt
Christinefred
@Christinefred
Oct 09 2016 15:17
Ja nu funkar det, tack
Fast nu får jag försöka hitta ett sätt så att det sparar till en fil
AndreasArne
@AndreasArne
Oct 09 2016 15:21
jag lade bara till "-o hej.txt" framför ping när jag startar det så funkade det
Christinefred
@Christinefred
Oct 09 2016 15:21
Vilket jag klarade nu, jag är så glad!!
AndreasArne
@AndreasArne
Oct 09 2016 15:21
:)