Ad esempio, se uno script python sputerà una stringa che fornisce il percorso di un file appena scritto che sto per modificare immediatamente dopo aver eseguito lo script, sarebbe molto bello averlo direttamente inviato agli appunti del sistema piuttosto di STDOUT
.C'è un modo per inviare direttamente un output Python agli appunti?
risposta
è possibile utilizzare un programma esterno, xsel
:
from subprocess import Popen, PIPE
p = Popen(['xsel','-pi'], stdin=PIPE)
p.communicate(input='Hello, World')
Con xsel
, è possibile impostare gli appunti che si desidera lavorare.
-p
funziona con la selezionePRIMARY
. Quello è il clic medio.-s
funziona con la selezioneSECONDARY
. Non so se questo è più usato.-b
funziona con la selezioneCLIPBOARD
. Questo è il tuoCtrl + V
.
Ulteriori informazioni sugli Appunti di X here e here.
Una funzione veloce e sporco ho creato per gestire questa situazione:
def paste(str, p=True, c=True):
from subprocess import Popen, PIPE
if p:
p = Popen(['xsel', '-pi'], stdin=PIPE)
p.communicate(input=str)
if c:
p = Popen(['xsel', '-bi'], stdin=PIPE)
p.communicate(input=str)
paste('Hello', False) # pastes to CLIPBOARD only
paste('Hello', c=False) # pastes to PRIMARY only
paste('Hello') # pastes to both
Potete anche provare di clipboard
pyGTK:
import pygtk
pygtk.require('2.0')
import gtk
clipboard = gtk.clipboard_get()
clipboard.set_text('Hello, World')
clipboard.store()
Questo funziona con la Ctrl + V
selezione per me.
Ho provato questo snippet ma sembra che non funzioni per le mie impostazioni. Dopo aver eseguito 'python abovescript.py', poi ho fatto clic con il tasto sinistro del mouse nel terminale, ma non compare' Hello, World'. – nye17
@ nye17 Quale metodo stai provando? Ti dà errori? – NullUserException
Il primo 'Clipboard', non funziona ma nessun errore riportato. – nye17
Questa non è una domanda di Python ma una domanda di shell. È già possibile inviare l'output di uno script Python (o qualsiasi altro comando) negli Appunti anziché lo standard, piping l'output dello script Python nel comando xclip
.
myscript.py | xclip
Se xclip
non è già installato sul vostro sistema (non è di default), questo è come lo si ottiene:
sudo apt-get install xclip
Se si voleva farlo direttamente dal vostro script Python Immagino che si possa eseguire lo shell out ed eseguire il comando xclip usando os.system()
che è semplice ma deprecato. Ci sono diversi modi per farlo (vedi il modulo subprocess
per il modo ufficiale corrente). Il comando che ci si vuole eseguire è qualcosa di simile:
echo -n /path/goes/here | xclip
Bonus: In Mac OS X, è possibile fare la stessa cosa con tubazioni in pbcopy
.
Preferisco che la stringa specificata dallo script venga inviata negli appunti, piuttosto che tutto l'output che viene inviato a 'xclip', poiché l'output finale e la stringa desiderata non sono necessariamente uguali. Ma hai ragione, posso usare "sottoprocesso" per inviarlo a "xclip", anche se preferirei un modo leggermente meno "forza bruta". – nye17
farlo in python è più bello - consente al codice di avere più output di un semplice nome file ... – tobyodavies
Aggiungi un flag della riga di comando per sopprimere tutto tranne il nome del percorso, quindi, o eventualmente inviarlo all'errore standard (così puoi collegalo a 'xclip' senza prendere il resto). Hai bisogno di un flag della riga di comando in ogni caso, dal momento che non vuoi clobare gli appunti dell'utente senza che gli venga detto esplicitamente, quindi perché non renderlo più unixy? – kindall
Come altri hanno sottolineato, questo non è "Python e batterie" in quanto comporta operazioni GUI. Quindi dipende dalla piattaforma. Se sei su Windows puoi usare il modulo Python win32 e accedere alle operazioni negli appunti di win32. Il mio suggerimento sarebbe stato quello di raccogliere un toolkit GUI (PyQT/PySide per QT, PyGTK per GTK + o wxPython per wxWidgets). Quindi utilizzare le operazioni negli Appunti.Se non hai bisogno delle cose pesanti dei toolkit, allora crea il tuo wrapper che userà il pacchetto win32 su Windows e tutto ciò che è disponibile su un'altra piattaforma e cambierà di conseguenza!
Per wxPython ecco alcuni link utili:
http://www.wxpython.org/docs/api/wx.Clipboard-class.html
http://wiki.wxpython.org/ClipBoard
http://www.python-forum.org/pythonforum/viewtopic.php?f=1&t=25549
Come è stato pubblicato in un altro answer, se si vuole risolvere quello in python, è possibile utilizzare Pyperclip che ha il vantaggio di essere multipiattaforma.
>>> import pyperclip
>>> pyperclip.copy('The text to be copied to the clipboard.')
>>> pyperclip.paste()
'The text to be copied to the clipboard.'
- 1. Python può inviare testo agli appunti del Mac
- 2. Impossibile aggiungere agli appunti
- 3. Come può Python accedere agli appunti X11?
- 4. C'è un modo per accedere all'hardware direttamente in Python?
- 5. Stranalità con accesso agli appunti
- 6. Un modo semplice per inviare informazioni di debug alla finestra 'Output' di Visual Studio
- 7. operazioni relative agli Appunti a Delfi
- 8. Asyncore di Python per inviare periodicamente i dati utilizzando un timeout variabile. C'è un modo migliore?
- 9. Esecuzione di un metodo/funzione python direttamente da un file
- 10. Memorizzazione di un file negli appunti in python
- 11. C'è un modo per memorizzare gli oggetti Python direttamente in mongoDB senza serializzarli
- 12. C'è un modo per dare nomi significativi agli oggetti Tuple?
- 13. C'è un modo per aggiungere meta-dati agli oggetti JavaScript?
- 14. Modo orientato agli oggetti per iterare attraverso un vettore std ::?
- 15. Stampa python output tkinter
- 16. python: serializza un dizionario in un semplice output html
- 17. Come posso inviare un segnale da un programma python?
- 18. C'è un modo per collegare un segnale di boost direttamente ad un altro segnale?
- 19. Un progetto con un tipo di output di libreria di classi non può essere avviato direttamente
- 20. Modo corretto per inviare un token di autenticità con AJAX ..?
- 21. Qual è il modo migliore per inviare un oggetto su una rete in Python?
- 22. C'è un modo per far sì che Pyramid JSON renderer output in output formattato, piuttosto stampato?
- 23. C'è un modo per inviare manualmente un avviso di memoria al dispositivo iPhone?
- 24. Esiste un modo per consentire agli utenti di copiare il testo da un sito Web e il testo non formattato?
- 25. Passare i comandi CQRS direttamente agli oggetti Dominio
- 26. Taglia agli Appunti di sistema da Vim su Ubuntu
- 27. Appunti python e gtk3 onChange
- 28. C'è un modo per selezionare il dispositivo di output per un audio da una pagina web?
- 29. Come scrivere un testo in un blocco appunti ipython?
- 30. come inviare un array su un socket in python
La soluzione sarebbe dipendente dal sistema operativo, va bene? – NullUserException
@NullUserException ఠ_ఠ Suppongo che lo sarebbe, ma sto lavorando interamente su Linux, quindi mi piacerebbe una soluzione per Linux. – nye17