Profilo di nuzzopippo

Nome nuzzopippo
Indirizzo email nuzzopippo@gmail.com
AvatarAvatar utenti
Messaggi218
Firma forum
Fatti non foste a viver come bruti...
  • Re: Calendario grafico con scadenze
    Forum >> Principianti
    Tieni conto che a me interessa visualizzare il codice, il numero della promo, le date, il marchio e il prezzo al pubblico
    ...
    Bisogna valutare ciò che si può rappresentare ... ho scaricato i Tuoi dati di esempio e devo dire che purtroppo non Ti aiutano tanto per la formattazione incoerente per tipi di dato quanto per la mancanza di normalizzazione dei dati stessi.

    Purtroppo, causa trasloco in corso, al momento ho poche opportunità di scrivere e non ho avuto spunto di discutere preventivamente con Te le criticità che i Tuoi dati presentano, ho pertanto provveduto a formattare uniformemente le date (è un fattore rilevante) e ad implementare un abozzo di normalizzazione dei riferimenti a singoli articoli delle varie promozioni che vi riferiscono ... quest'ultima è certamente la condizione che Ti crea più difficoltà. Per ovviare ad essa ho stabilito di unificare i dati per "Codice Prodotto" riferendo i dati associati (non uniformi) al primo trovato ed associando ad esso articolo le promozioni inerenti.

    Ovviamente, ho operato su un csv prodotto dai dati, manipolati, da Te forniti, ed ho memorizzato il tutto in una lista di dizionari, stralcio del codice relativo :

            with open(fname) as f:
                data = [x.split(';') for x in f.readlines() if x]
            articles = []
            codes = set([x[8] for x in data[1:]])
            for c in codes:
                values = [x for x in data if x[8] == c]
                if not values:
                    pass
                else:
                    art = {}
                    art['codice'] = values[0][8]
                    art['modello'] = values[0][9]
                    art['marchio'] = values[0][10]
                    art['descrizione'] = values[0][11]
                    art['quantita'] = values[0][12]
                    art['prezzo'] = f'{max([float(x[15]) for x in values]):.2f}'
                    art['promozioni'] = []                
                    for d in values:
                        prom = {}
                        prom['codice'] = d[0]
                        prom['competenza'] = d[1]
                        prom['attivo'] = d[2]
                        prom['cumulabile'] = d[3]
                        prom['soggetto'] = d[4]
                        prom['fornitore'] = d[5]
                        prom['inizio'] = d[6]
                        prom['fine'] = d[7]
                        prom['sc%'] = d[13]
                        prom['scv'] = d[14]
                        prom['prezzo'] = f'{float(d[15]):0.2f}'
                        art['promozioni'].append(prom)
                    articles.append(art)
            articles.sort(key=lambda x: x['codice'])
            self.articoli = articles
    Non sono certo di aver interpretato correttamente i dati ma in fin dei conti è solo un esempio.




    L'esempio è composto da due finestre, nella prima una treeview permette di selezionare uno o più articoli mostrando in una seconda treeview le promozioni associate con dati più o meno completi.

    Due bottoni di comando permettono di aprire la finestra del "calendario" da Te richiesta impostando per la rappresentazione di un singolo articolo e per più articoli (non esagerare, non ho reso il calendario "scorrevole"), il calendario è mensile ed impostato per il mese corrente nel sistema, uno spinbox Ti permetterà di scorrere tra i mesi, giungendoa marzo-febbraio il calendario Ti mostrerà delle barre color pastello in corrispondenza degli articoli interessati.

    Non sto qui a spiegare il procedimento, ci vorrebbe troppo tempo, studiati la classe "Mensile", è quella che provvede alla rappresentazione a barre delle promozioni.




    Il codice non lo ho curato eccessivamente, forse qualche bug ci scappa, comunque nel complesso funziona decentemente.




    Fai sapere se Ti è utile e che ne pensi ... se qualche altro utente vorrà esporre critiche e suggerimenti saranno ben accetti.




    Allego in file del codice (395 righe) ed il csv di test, devono risiedere nella stessa directory




    Ciao



    Fatti non foste a viver come bruti...
  • Re: Calendario grafico con scadenze
    Forum >> Principianti
    beh, ovviamente il discorso può variare in base ai dati da rappresentare ma di per se è possibile realizzarlo in molti modi.

    Uno dei più semplici che mi viene in mente è quello di sfruttare il gestore "grid" per generare un header tipo "codice|descrizione!01|02|..." e quindi sfruttare rowspan nel configurare le celle di codice e descrizione in rapporto al numero di offerte da rappresentare per articolo, mentre ilo metodo colspan permetterebbe di unificare le celle dei giorni in cui ricade una singola offerta. delle label diversamente colorate evidenzierebbero i periodi delle offerte, magari corredati da una brevissima descrizione.




    Potrebbe anche utilizzarsi un canvas per "disegnare" le cose ma sarebbe un attimino più articolato.

    Volendo potrebbe anche realizzarsi un mix di metodologie ibride.




    In ogni caso dovresti decidere "cosa" vuoi per davvero visualizzare e valutare le dimensioni necessarie alla rappresentazione prima ancora di iniziare una implementazione, quantità di dati eccedenti lo schermo comportano approcci diversi da quantità per cui una schermata è sufficiente.




    Nel caso Tu ritenga di provare qui qualche bozza proponi un set di dati su cui ragionare che vediamo cosa si riesce ad escogitare.




    Ciao
    Fatti non foste a viver come bruti...
  • Re: Export immagine Turtle
    Forum >> Principianti
    La cosa che ho notato è che se imposto il colore dello sfondo della finestra di turtle con il comando screen.bgcolor("black"), questo non mi viene importato nell'immagine. È normale? Occorre qualche altro comando?
    Normale? ... suppongo di si, essendo il formato svg usato per grafica vettoriale, da ricerche fatte in giro mi par di capire che per ottenere uno sfondo èer tale formato bisogna crearsi un rettangolo, ma non posso dire di conoscere tale formato di immagine.




    Per altro, dalla poca documentazione disponibile e dalla valutazione del codice sorgente di canvas2svg mi sembra proprio che tale opzione non sia prevista ... comunque, è piuttosto semplice* ovviare creando un rettangolo di sfondo che contenga il disegno, questo è un test variando l'ultimo esempio :

    import turtle
    from canvasvg import saveall
    
    
    def make_bg(cnv: object, margin: int=10,
                bd_col: str='', bd_size: int=1) -> object:
        '''
        Disegna un rettangolo con funzione di "sfondo" del colore assegnato
        a turtle, si tenga presente che il canvas non lo contiene
        PARAMETRI :
        cnv    : oggetto tkinter.canvas
        margin : margine, in pixel, ripetto al disegno
        bd_col : colore di bordo, se nullo viene ignorato
        bd_size: spessore, in pixwl, del bordo del rettangolo
        '''
        x1, y1, x2, y2 = cnv.bbox('all')
        # bgc = cnv['background']  -- così non va
        bgc = turtle.bgcolor()
        if bd_col:
            rect = cnv.create_rectangle(x1 - margin,
                                        y1 - margin,
                                        x2 + margin,
                                        y2 + margin,
                                        outline = bd_col,
                                        fill = bgc,
                                        width = bd_size)
        else:
            rect = cnv.create_rectangle(x1 - margin,
                                        y1 - margin,
                                        x2 + margin,
                                        y2 + margin,
                                        fill = bgc,
                                        width=0)
        cnv.tag_lower(rect)
        return cnv
    
    
    # DISEGNA
    turtle.bgcolor('yellow')
    tart = turtle.Turtle()
    
    tart.color('red')
    for j in range(360):
        for i in range(4):
            tart.forward(50+j)
            tart.left(90)
        tart.left(4)
    
    
    wdg = turtle.getcanvas()  # recupera lo scrolled_canvas
    # disegno pseudo-sfondo con bordo rosso di 2 pixel
    wdg = make_bg(wdg, bd_col='red', bd_size=2)
    
    saveall('test_04c.svg', wdg)  # lo salva con 10 pixwel di sfondo trasparente
    
    
    Spero Ti sia utile




    * = semplice, ovviamente, conoscendo python e consultando la documentazione di tkinter, non credo sia pane per i denti di ChatGPT e simili AI che, dopo tutto, sono solo algoritmi euristici (quindi statistici) che seppur fantastici non hanno niente di "intelligente"
    Fatti non foste a viver come bruti...
  • Re: Export immagine Turtle
    Forum >> Principianti
    Ciao, ho provato il pacchetto svg_turtle, non mi sembra che risolva il Tuo problema, certamente è interessante il formato vettoriale e la trasparenza ma, purtroppo, non riporta completamente le immagini, prova questo esempio :

    from svg_turtle import SvgTurtle
    
    # DISEGNA
    tart = SvgTurtle()
    
    tart.color('red')
    for j in range(360):
        for i in range(4):
            tart.forward(50+j)
            tart.left(90)
        tart.left(4)
    
    
    tart.save_as('test_04.svg')                             #la salva
    
    
    Documentazione pessima e, guardando il codice, decisamente "povero" di opzioni.




    Cercando, sempre sul formato svg, ho trovato il modulo "canvasvg", anche questo con documentazione penosa ma ha una funzione interessante "saveall", che salva l'intero contenuto del canvas che riceve quale parametro, oltre a permettere di definire un bordo immagine a piacere, un esempio:

    import turtle
    from canvasvg import saveall
    
    # DISEGNA
    tart = turtle.Turtle()
    
    tart.color('red')
    for j in range(360):
        for i in range(4):
            tart.forward(50+j)
            tart.left(90)
        tart.left(4)
    
    
    wdg = turtle.getcanvas()  # recupera lo scrolled_canvas
    
    saveall('test_04b.svg', wdg)
    
    
    Suggerirei di guardare anche quest'ultimo modulo.
    Fatti non foste a viver come bruti...
  • Re: Export immagine Turtle
    Forum >> Principianti
    beh, il mio voleva essere un semplice "la", mi aspettavo Tu ricorressi alla documentazione di tkinter.canvas per vedere un po' come vanno le cose, in tal caso, consultando la documentazione a proposito di tkinter.canvas.poscript avresti notato che vi sono vari parametri possibili, alcuni tra cui "dovrebbero" riferire alla "tela" del canvas, che ha coordinate proprie non inerenti quelle di visualizzazione dello schermo.

    Tra l'altro, tkinter.canvas, ha la proprietà "bbox(namewidget)" che permette di estrarre le coordinate del rettangolo di contenzione di ogni singolo item disegnato (con "all" si ottengono le coordinate di contenzione dell'intero disegno) ... non mi ero impelagato ad approfondire, dato che non hai indicato il codice per ottenere il grafico per Te problematico.




    Comunque, stante il Tuo problema, ho guardato un po', calcolandosi le coordinate della tela e valorizzando gli opportuni parametri di postscript riesco ad ottenere il disegno completo anche con gli elementi al di fuori della finestra, per far ciò ho raddoppiato il numero dei triengoli ed implementato le considerazioni sopra, il codice :

    import turtle
    from PIL import Image
    from io import BytesIO
    
    # DISEGNA
    tart = turtle.Turtle()
    
    tart.color('red')
    for j in range(360):
        for i in range(4):
            tart.forward(50+j)
            tart.left(90)
        tart.left(4)
    
    
    wdg = turtle.getcanvas()  # recupera lo scrolled_canvas
    # coordinale e dimensioni della sola immagine
    x1, y1, x2, y2 = wdg.bbox('all')
    w, h = x2 - x1, y2 - y1
    
    # SALVA
    # applica i dati calcolati e crea il postscript della sola immagine
    ps_data = wdg.postscript(colormode = 'color',
                             x = x1,
                             y = y1,
                             width = w,
                             height = h)
    im = Image.open(BytesIO(bytes(ps_data, 'ascii')))  # crea una immagine dai dati
    im.save('test_03.png')                             #la salva
    ed a me funziona benissimo, provalo e fai sapere.




    N.B. : le immagini sono cose complesse, tieni presente che potresti avere altri generi di problemi, tipo sui colori per differenze di palette, ovvero problemi sui pixel, se ricordo bene postscript e Image sono entrambi raw ma ps opera su 96 DPI mentre Image su 72 DPI, convertendo in formati bitmap potrebbero essere introdotti artefatti, corregibili con metodi di proporzionamento vari, gli altri parametri di postscript potrebbero essere d'aiuto.




    Ciao
    Fatti non foste a viver come bruti...
  • Re: Export immagine Turtle
    Forum >> Principianti
    Non utilizzo turtle ma la Tua domanda mi ha intrigato, partendo dal presupposto che turtle si basa su tkinter, utilizzando la funzione "getcanvas()" di turtle si può estrarre ed utilizzare il canvas in maniera ordinaria.

    Neanche "salvare" i contenuti di un canvas è cosa che ordinariamente faccio, però i canvas possono salvare il loro contenuto in formato postscript.

    Utilizzando la classe Image di pillow, tali dati possono essere caricati e salvati in uno dei formati supportati da pillow, ti faccio un esempio:

    import turtle
    from PIL import Image
    from io import BytesIO
    
    # DISEGNA
    tart = turtle.Turtle()
    
    tart.color('red')
    for j in range(180):
        for i in range(4):
            tart.forward(50+j)
            tart.left(90)
        tart.left(4)
    
    
    wdg = turtle.getcanvas()  # recupera lo scrolled_canvas
    
    # SALVA
    ps_data = wdg.postscript(colormode='color')  # memorizza il contenuto come fosse
                                                 # un file postscript
    im = Image.open(BytesIO(bytes(ps_data, 'ascii')))  # crea una immagine dai dati
    im.save('test_02.png')                             #la salva
    
    
    lo script utilizza turtle per disegnare 180 quadrati in rosso, che nel loro insieme danno una doppia spirale piuttosto carina, poi vengono applicati i concetti sopra detti per creare una immagine png nella cartella di lancio.




    Per utilizzare lo script si deve avere pillow installato, magari in un venv, sotto linux funziona tranquillamente, non saprei dire in ambiente windows (non lo uso)




    Spero Ti sia utile
    Fatti non foste a viver come bruti...
  • Re: Le classi queste sconosciute
    Forum >> Principianti
    Ciao @Trescon ... finalmente un post che non sia di spammer o bot ...




    Il Tuo problema deriva certamente da come implementi ed utilizzi le Tue classi, impossibile dare risposte utili dato che non hai fornito praticamente nulla di valido in merito alle Tue implementazioni.

    Comunque, penso che il capitolo 9 del manuale Ti possa essere utile, approfondisci particolarmente i capitoli 9.2 e 9.3.1-9.3.5 e fai prove sino ad assimilare la materia.




    Il traceback che hai postato indica chiaramente che hai cercato di utilizzare proprietà di oggetti di classe "Conversione_date" come se tali proprietà facessero parte di widget tkinter ... le cose non funzionano così, a meno Tu non abbia creato dei sub-classamenti con classi-madre multiple, tra cui "Conversione_date", cosa che non credo.

    Le proprietà di un oggetto istanziato restano di proprietà dell'oggetto stesso, non di quello che lo istanzia, anche se l'oggetto è definito quale variabile di istanza del chiamente ... provo a farTi un esempio ridefinendo lo stralcio di classe da Te postato in modo che scinda una lista di stringhe sulla base del "promo" iniziale

    Python 3.12.3 (main, Feb  4 2025, 14:48:35) [GCC 13.3.0] on linux
    Type "help", "copyright", "credits" or "license()" for more information.
    class Conversione_date:
        def __init__(self):
        
            self.file_modificati = []
            self.file_modificati_giornalieri = []
            
        def converti_data_promo(self, data):
            # qui ci sono scariate riche di codice che non utilizzano
            # le variabili "inquisite"
            for d in data:
                if d.startswith("promo"):
                    self.file_modificati_giornalieri.append(d)
                else:
                    self.file_modificati.append(d)
    
                    
    values = ['Televisore', 'lavatrice', 'promo lavatrice', 'cellulare',
              'promo cellulare', 'lavastoviglie', 'piano corruta']
    class A:
        def __init__(self):
            self.cvd = Conversione_date()
            self.cvd.converti_data_promo(values)
    Istanziando un oggetto di classe "A" noi non potremo riferire direttamente alle liste contenute dalle istanze a Conversione_date

    gest = A()
    gest.file_modificati_giornalieri
    Traceback (most recent call last):
      File "/usr/lib/python3.12/idlelib/run.py", line 580, in runcode
        exec(code, self.locals)
      File "<pyshell#15>", line 1, in <module>
    AttributeError: 'A' object has no attribute 'file_modificati_giornalieri'
    ma dovremo riferire alla istanza a Conversione_date memorizzata (self.cvd)

    gest.cvd.file_modificati_giornalieri
    ['promo lavatrice', 'promo cellulare']
    gest.cvd.file_modificati
    ['Televisore', 'lavatrice', 'cellulare', 'lavastoviglie', 'piano corruta']
    
    
    Lo stralcio di traceback da Te proposto indica che sei ricaduto in questo tipo di problema.




    Spero Ti sia utile, ciao
    Fatti non foste a viver come bruti...
  • Re: Chiarimento sull'uso del metodo "subprocess.Popen".
    Forum >> Programmazione Python >> Scripting
    Aggiornamento:




    A giudicare da quanto letto, partendo da questa pagina, mi son convinto che "adb" esegua un comando alla volta e poi ritorni immediatamente, no vi dovrebbe essere una shell disponibile, quindi la modalità "interattiva" richiesta dallo OP non vale la pena di essere perseguita (ci risparmiamo un po' di thread per lettura/scrittura e relativa queue).

    Il mio dispositivo di test dispone di Android 5.0, quindi va a farsi benedire l'accesso in rete riportato nel link, può essere utilizzato solo su usb, approfittando del fatto che deve essere l'unico dispositivo connesso con tale modalità (adb darebbe errore altrimenti), ho verificato che è possibile tranquillamente navigare il file-system del cellulare e copiarsi dei files li depositati, vedere sessione sotto (ridotta per quanto possibile)

    Python 3.12.3 (main, Nov  6 2024, 18:32:19) [GCC 13.2.0] on linux
    Type "help", "copyright", "credits" or "license()" for more information.
    import subprocess as sp
    result = sp.check_output(['adb', 'devices', '-l'])
    result
    b'List of devices attached\n0123456789ABCDEF       device usb:3-8 product:V10_open_eu model:LG X150 device:v10 transport_id:1\n\n'
    result = sp.check_output(['adb', 'shell', 'ls', '-l', '/'])
    text = result.decode()
    data = text.split('\r\n')
    for r in data:
        print(r)
    
        
    drwxr-xr-x root     root              2010-01-01 01:47 acct
    drwxrwx--- system   cache             2010-01-01 01:07 cache
    lrwxrwxrwx root     root              1970-01-01 01:00 charger -> /sbin/healthd
    dr-x------ root     root              2010-01-01 01:47 config
    ...
    -rw-r--r-- root     root        30298 1970-01-01 01:00 file_contexts
    lstat '//flex' failed: Permission denied
    -rw-r----- root     root         1712 1970-01-01 01:00 fstab.mt6582
    ...
    -rw-r--r-- root     root        11264 1970-01-01 01:00 service_contexts
    drwxr-x--x root     sdcard_r          2010-01-01 01:47 storage
    dr-xr-xr-x root     root              2010-01-01 01:47 sys
    drwxr-xr-x root     root              1970-01-01 01:00 system
    ...
    result = sp.check_output(['adb', 'shell', 'ls', '-l', '/storage'])
    text = result.decode()
    data = text.split('\r\n')
    for r in data:
        print(r)
    
        
    drwxr-xr-x media_rw media_rw          2010-01-01 01:47 emulated
    lrwxrwxrwx root     root              2010-01-01 01:47 sdcard0 -> /storage/emulated/legacy
    drwxrwx--x root     sdcard_r          1970-01-01 01:00 sdcard1
    drwx------ root     root              2010-01-01 01:47 usbotg
    
    result = sp.check_output(['adb', 'shell', 'ls', '-l', '/storage/sdcard1'])
    text = result.decode()
    data = text.split('\r\n')
    for r in data:
        print(r)
    
        
    drwxrwx--x root     sdcard_r          2014-02-03 08:40 Android
    drwxrwx--- root     sdcard_r          2014-02-03 08:38 DCIM
    drwxrwx--- root     sdcard_r          2014-02-03 08:32 LOST.DIR
    drwxrwx--- root     sdcard_r          2016-06-25 12:03 Recording
    drwxrwx--- root     sdcard_r          2015-10-25 15:05 bluetooth
    drwxrwx--- root     sdcard_r          2020-10-06 17:54 documents
    drwxrwx--- root     sdcard_r          2021-05-30 06:32 download
    drwxrwx--- root     sdcard_r          2014-02-03 08:32 foursquare
    drwxrwx--- root     sdcard_r          2014-06-03 07:49 musica
    drwxrwx--- root     sdcard_r          2018-07-30 12:12 video
    
    result = sp.check_output(['adb', 'shell', 'ls', '-l', '/storage/sdcard1/documents'])
    text = result.decode()
    data = text.split('\r\n')
    for r in data:
        print(r)
    
        
    -rwxrwx--- root     sdcard_r  2029923 2016-06-25 22:31 BREAKING DAWN.pdf
    -rwxrwx--- root     sdcard_r  1586880 2016-06-25 19:32 ECLIPSE.pdf
    -rwxrwx--- root     sdcard_r  1384907 2016-06-25 20:32 NEW MOON.pdf
    drwxrwx--- root     sdcard_r          2015-08-15 19:10 Sample Files
    -rwxrwx--- root     sdcard_r   624276 2016-06-25 20:33 Stephenie Meyer - MIDNIGHT SUN (cap 1-12)_italiano.pdf
    -rwxrwx--- root     sdcard_r  1282329 2016-06-25 20:33 Twilight.pdf
    
    
    result = sp.check_output(['adb', 'pull', '/storage/sdcard1/documents/ECLIPSE.pdf', '/home/ngiuseppe'])
    result
    b'/storage/sdcard1/documents/ECLIPSE.pdf: 1 file pulled, 0 skipped. 4.4 MB/s (1586880 bytes in 0.345s)\n'
    ho voluto mostrare come son proceduto nella navigazione ed il risultato della copia da cellulare a computer, modalità analoghe dovrebbero funzionare per fare l'inverso.




    Spero possa essere utile.

    Ciao

    Fatti non foste a viver come bruti...
  • Re: Chiarimento sull'uso del metodo "subprocess.Popen".
    Forum >> Programmazione Python >> Scripting
    Come detto, il mondo Android mi è sconosciuto, cercando in merito ad "adb" ho scoperto che esiste anche per il mondo linux, scusa se inserisco un tip per eventuali linux-users interessati :

    può essere installato dal Vostro gestore di pacchetti, in distro debian-based:

    NzP:~$ sudo apt install adb
    
    Si tratta dello Android-SDK di google.

    Il comando "adb" che avrete disponibile è, essenzialmente, un server, capace di rilevare dispositivi in rete, udb/seriale, etc. il solito "man adb" per le numerose opzioni disponibili.




    Se il dispositivo "collegato" non avrà abilitata tra le opzioni dello sviluppatore la modalità "debug USB" esso NON sarà disponibile anche se collegato.




    Venendo a python, cercando di muovere i primi passi utilizzando la metodica proposta dallo O.P., utilizzando un vecchio "LG Bello II" molto vecchio, mi è riuscito di vedere il device in questo modo :

    import subproces
    result = subprocess.check_output(['adb', 'devices'])
                              
    result
    b'List of devices attached\n0123456789ABCDEF\tunauthorized\n\n'
    data = result.decode('utf-8')
    data
    'List of devices attached\n0123456789ABCDEF\tunauthorized\n\n'
    device = data.split('\n')1.split('\t')
    print(f'device {device0} - stato {device1}')
    device 0123456789ABCDEF - stato unauthorized
    mi è riuscito di avere gli stessi risultati tramite Popen, ma senza utilizzo della shell

    adb_sh = subprocess.Popen(['adb', 'devices'],
                              stdin=subprocess.PIPE,
                              stdout=subprocess.PIPE,
                              stderr=subprocess.PIPE)
    out, err = adb_sh.communicate()
    out
    b'List of devices attached\n0123456789ABCDEF\tunauthorized\n\n'
    dato che l'utilizzo della shell scatena una miriade di output, attivando, se ho capito bene, il server

    adb_sh = subprocess.Popen(['adb', 'devices'],
                              shell=True,
                              stdin=subprocess.PIPE,
                              stdout=subprocess.PIPE,
                              stderr=subprocess.PIPE)
    out, err = adb_sh.communicate()
    out
    b'Android Debug Bridge version 1.0.41\nVersion 34.0.4-debian\nInstalled as
     /usr/lib/android-sdk/platform-tools/adb\nRunning on Linux 6.8.0-50-generic...
    rendendo ingestibile l'output.

    Non ho ancora ben capito come funziona la shell con adb, l'impressione è che venga chiusa appena eseguito un comando, al momento non ho motivo di pensare che rimanga disponibile un PID, mi riservo di approfondire.




    @FaMel 79, Tu sei riuscito a vedere i Tuoi devices? Se la risposta è "NO" prova a sostituire al mio "adb" il pathmane del Tuo eseguibile, oltre, naturalmente, a verificare le impostazioni del Tuo device.

    per inviare i comandi si dovrebbe utilizzare "communicate" inviando i comandi come byte (stringa.encode()) e sopra vi è esempio di come recuperare lo standard output e lo standard error.




    Al momento è quello che posso, spero Ti sia utile, ciao

    Fatti non foste a viver come bruti...
  • Re: Chiarimento sull'uso del metodo "subprocess.Popen".
    Forum >> Programmazione Python >> Scripting
    sono un nuovo utente del forum alla ricerca di qualche consiglio... Avrei bisogno di qualche chiarimento su come utilizzare il metodo "subprocess.Popen" per gestire l'eseguibile "adb.exe" durante le operazioni di I/O su smartphone Android. Di seguito condivido lo script realizzato e l'output ottenuto.
    Scusa se intervengo solo per porre una domanda, non ho alcuna pratica di interfacciamento con sistemi android ma il quesito mi ha incuriosito.

    Domanda : le operazioni di I/O che stai cercando di effettuare sono da un sistema operativo "altro" (tipo windows, linux, etc.) verso un dispositivo android collegato, ovvero direttamente in una applicazione funzionante in un dispositivo android?




    Chiarendo tale "ambiguità" scaturiscono linee di ricerca diverse, con risultati, nel primo caso, anche direttamente collegati al quesito, tipo questo, od anche inerenti tools specifici, tipo questo, mentre nel secondo, a giudicare da questo, sembra una problematica tutt'altro che semplice.




    Come detto, la Tua domanda mi ha incuriosito, "abd.exe" mi è sconosciuto (uso solo sistemi linux) ma se precisi cosa intendi fare e come si potrebbe cercare qualcosa di specifico al Tuo problema.




    Ciao

    Fatti non foste a viver come bruti...