Come copiare il risultato di uno script Python3 nella clipboard su Linux

Terzo post in poco tempo, mi ci sto (ri)mettendo d’impegno a quanto  pare.

Recentemente ho ripreso a programmare e mi è preso il vezzo di creare uno script che creasse un separatore per il mio codice, qualcosa del tipo

######----------     GESTORE EVENTI      ----------######

Dato il testo centrale del separatore (in questo caso “GESTORE EVENTI”) lo script mi crea un separatore come sopra che occupi esattamente le 72 colonne di uno script Python;  In pratica mi ‘centra’ il testo nel separatore.

Lo script, che riporto qui in basso, è abbastanza banale (e andrebbe raffinato), ciò che invece mi ha creato problemi è stato il capire come fare a passare il separatore appena creato alla clipboard di Linux, in modo che possa essere facilmente inserito con un CTRL-V nel mio editor preferito.

Pensavo che Python avesse un sistema bult-in per un operazione così banale, ma così non è. I suggerimenti trovati in rete consigliavano di usare pyperclip (da installare, non presente nei repository della mia Fedora 21) o xclip. Ho ovviamento optato per quest’ultimo.

Lo snippet trovato (per windows) e riadattato, è il seguente:

import subprocess
def copy2clip(txt):
    cmd='echo "' + txt +'"|xclip -selection clipboard'
    return subprocess.check_call(cmd, shell=True)

copy2clip('now this is on my clipboard')

In pratica tramite subprocess si simula l’invio del comando echo “nostro divisore” e tramite la pipe lo si passa a xclip (N.B., xclip, non clip come in Windows).
I parametri finali del comando servono a selezionare la clipboard relativa al CTRL-V, altrimenti di default xclip passa il testo alla clipboard che si attiva con il tasto centrale del mouse o con SHIFT + INS.

Se vuoi vedere lo script completo clicca su continua

# crea un divisore per il mio codice
# il divisore divide le varie sezioni del mio codice
# il divisore è di 72 caratteri ed è del tipo:
# 6#10-nspazi testo nspazi10-6#
# es.
######---------- DIVISORE ----------######

#!/usr/bin/python3
# -*- coding: utf-8 -*-

import sys, subprocess

MAX_DIM = 36

def crea_divisore(t):
    if len(t) > MAX_DIM:
        print("stringa troppo lunga (>36) per creare un divisore")
    else:
        #calcolo gli spazi da aggiungere ad inizio (e fine)
        n_spazi = int( (36-len(t) )/2 )
        s = "######----------" + " "*n_spazi + t.upper() + " "*n_spazi\
            + "----------######"
        return s

def copy2clip(txt):
    """
    copia txt nella clipboard
    """
    cmd = 'echo "' + txt + '" |xclip -selection clipboard'
    return subprocess.check_call(cmd, shell=True)

testo = sys.argv[1]
divisore = crea_divisore(testo)
print (divisore)
copy2clip(divisore)
print ("Il divisore è ora copiato nella clipboard")
Questa voce è stata pubblicata in informatica, linux, mini guide e contrassegnata con , , , , , . Contrassegna il permalink.

Lascia un commento