• Najnowsze pytania
  • Bez odpowiedzi
  • Zadaj pytanie
  • Kategorie
  • Tagi
  • Zdobyte punkty
  • Ekipa ninja
  • IRC
  • FAQ
  • Regulamin
  • Książki warte uwagi

program do pobierania python

Object Storage Arubacloud
0 głosów
252 wizyt
pytanie zadane 5 grudnia 2020 w Python przez lubie internet Użytkownik (780 p.)

witam, mam problem z kodem w pythonie, program działa i pobiera pliki, jednak podczas pobierania nie pojawia sie plik a dopiero po skończonej pracy programu sie pojawia, problem polega na tym że ten właśnie plik jest pobierany do ramu, a ja bym chciał żeby był pobierany od razu do pliku a nie do ramu. Czy jest na to jakiś sposób?

tutaj załączam kod

import requests
import os
a = input("podaj strone z plikiem: ")
b = input("podaj nazwe lub patch do pobranego pliku: ")
r = requests.get(a)
open(b, 'wb').write(r.content)
print("pobieranie zakończone!, plik ma rozmiar: ")
os.system(f"du -sh {b}")

P.S

kod był pisany pod linuxa

1 odpowiedź

0 głosów
odpowiedź 5 grudnia 2020 przez tangarr Mędrzec (154,780 p.)

Podejrzewam, że Python buforuje dane w pamięci, żeby zoptymalizować operacje zapisu na dysku.
Synchronizacja pliku następuje po zapełnieniu bufora lub przy zamknięciu pliku.
Zmodyfikuj swój kod tak, aby zamykać plik po zapisie danych.

import requests
import os
a = input("podaj strone z plikiem: ")
b = input("podaj nazwe lub patch do pobranego pliku: ")
r = requests.get(a)
f = open(b, 'wb')
f.write(r.content)
f.close()
print("pobieranie zakończone!, plik ma rozmiar: ")
os.system(f"du -sh {b}")

 

komentarz 5 grudnia 2020 przez lubie internet Użytkownik (780 p.)
chyba nie zrozumiałeś o co mi chodzi, program działa ale podczas pobierania plik jest w ramie, a ja chce żeby ten jeszcze nie dokońca pobrany plik był pobierany od razu do pliku na dysku, a nie w ramie
komentarz 5 grudnia 2020 przez tangarr Mędrzec (154,780 p.)
Zmyliłeś mnie pisząc "dopiero po skończonej pracy programu sie pojawia"
Spróbuj użyć tej funkcji https://docs.python.org/3.4/library/urllib.request.html?highlight=urllib#urllib.request.urlretrieve
komentarz 5 grudnia 2020 przez lubie internet Użytkownik (780 p.)
spk już działa zaraz wrzuce dorobione na githuba a jest jakiś sposób żeby python robił 2 rzeczy jednocześnie? bo chciałnym zrobić też takie ile waży plik w czasie pobierania
komentarz 5 grudnia 2020 przez tangarr Mędrzec (154,780 p.)
Poeksperymentuj z argumentem reporthook.
komentarz 5 grudnia 2020 przez lubie internet Użytkownik (780 p.)
noo ok ale jakoś nie wiem jak to zrobić, w każdym razie to co chce zrobić działa popróbuje jeszcze z tym i zaraz githuba updateuje
komentarz 6 grudnia 2020 przez lubie internet Użytkownik (780 p.)
poprawiłem jeszcze bardziej, działa domyślna nazwa pliku ale nie wiem jak progress bar zrobić, wiem że sie da reporthook ale nie wiem jak
komentarz 6 grudnia 2020 przez tangarr Mędrzec (154,780 p.)

Wydaje mi się że reporthook powinien być funkcją przyjmującą 3 argumenty.
Przetestuj coś takiego

def my_reporthook(a,b,c):
    print("my_repohook: a="+a+" b="+b+" c="+c)

 

komentarz 6 grudnia 2020 przez lubie internet Użytkownik (780 p.)

nie działa mówi że musi być typ danych int

Traceback (most recent call last):
  File "/root/code/python3/pobieracz/pobieracz.py", line 11, in <module>
    urllib.request.urlretrieve(a, b, reporthook=my_reporthook)
  File "/usr/lib/python3.8/urllib/request.py", line 273, in urlretrieve
    reporthook(blocknum, bs, size)
  File "/root/code/python3/pobieracz/pobieracz.py", line 4, in my_reporthook
    print("my_repohook: a="+a+" b="+b+" c="+c)
TypeError: can only concatenate str (not "int") to str

 

komentarz 6 grudnia 2020 przez tangarr Mędrzec (154,780 p.)
:)
W czym problem?
Przekonwertuj int na string (https://www.w3schools.com/python/ref_func_str.asp)
komentarz 6 grudnia 2020 przez lubie internet Użytkownik (780 p.)
chyba raczej string na int, i będzie działać?

dobra zrobie tak czy siak, i jakoś nie wiem jak ma działać ta funkcja

Podobne pytania

0 głosów
0 odpowiedzi 551 wizyt
pytanie zadane 7 grudnia 2019 w C i C++ przez Rafin Nowicjusz (160 p.)
0 głosów
1 odpowiedź 582 wizyt
pytanie zadane 14 grudnia 2017 w PHP przez mi-20 Stary wyjadacz (13,190 p.)
0 głosów
0 odpowiedzi 91 wizyt

92,541 zapytań

141,383 odpowiedzi

319,482 komentarzy

61,928 pasjonatów

Motyw:

Akcja Pajacyk

Pajacyk od wielu lat dożywia dzieci. Pomóż klikając w zielony brzuszek na stronie. Dziękujemy! ♡

Oto polecana książka warta uwagi.
Pełną listę książek znajdziesz tutaj.

Akademia Sekuraka

Kolejna edycja największej imprezy hakerskiej w Polsce, czyli Mega Sekurak Hacking Party odbędzie się już 20 maja 2024r. Z tej okazji mamy dla Was kod: pasjamshp - jeżeli wpiszecie go w koszyku, to wówczas otrzymacie 40% zniżki na bilet w wersji standard!

Więcej informacji na temat imprezy znajdziecie tutaj. Dziękujemy ekipie Sekuraka za taką fajną zniżkę dla wszystkich Pasjonatów!

Akademia Sekuraka

Niedawno wystartował dodruk tej świetnej, rozchwytywanej książki (około 940 stron). Mamy dla Was kod: pasja (wpiszcie go w koszyku), dzięki któremu otrzymujemy 10% zniżki - dziękujemy zaprzyjaźnionej ekipie Sekuraka za taki bonus dla Pasjonatów! Książka to pierwszy tom z serii o ITsec, który łagodnie wprowadzi w świat bezpieczeństwa IT każdą osobę - warto, polecamy!

...