Errore di Pyperclip su WSL2 con Ubuntu 18 LTS durante il tentativo di accedere ai dati copiati da Windows
Sto usando IPython 7.16.1 (Python 3.7.7) su Ubuntu 18.04 in esecuzione in WSL2 tramite Windows Terminal Preview (1.2.2234.0) su Windows 10 build 20190 (sebbene il problema non sia limitato a IPython, è con la shell stessa) . Sto cercando di utilizzare pandas.read_clipboard()su dati copiati da Windows, cioè al di fuori di WSL. Tuttavia, ottenendo il seguente errore:
PyperclipException:
Pyperclip could not find a copy/paste mechanism for your system.
For more information, please visit
https://pyperclip.readthedocs.io/en/latest/introduction.html#not-implemented-error
Capisco che ciò sia dovuto al fatto che WSL non supporta un display, tuttavia, poiché posso copiare i dati incollati da e verso WSL e Windows, dovrebbe esserci un meccanismo in cui potrei accedere agli appunti di Windows. c'è una soluzione a questo?
Ho guardato xclip
, xsel
, QTpy
come suggerito qui , e qui , non ha aiutato.
Traccia dello stack completo:
In [1]: import pandas as pd
In [2]: df = pd.read_clipboard()
---------------------------------------------------------------------------
PyperclipException Traceback (most recent call last)
<ipython-input-2-861af318b71b> in <module>
----> 1 df = pd.read_clipboard()
~/anaconda3/envs/tensorflow_gpu/lib/python3.7/site-packages/pandas/io/clipboards.py in read_clipboard(sep, **kwargs)
36 from pandas.io.parsers import read_csv
37
---> 38 text = clipboard_get()
39
40 # Try to decode (if needed, as "text" might already be a string here).
~/anaconda3/envs/tensorflow_gpu/lib/python3.7/site-packages/pandas/io/clipboard/__init__.py in lazy_load_stub_paste()
648 global copy, paste
649 copy, paste = determine_clipboard()
--> 650 return paste()
651
652
~/anaconda3/envs/tensorflow_gpu/lib/python3.7/site-packages/pandas/io/clipboard/__init__.py in __call__(self, *args, **kwargs)
285 class ClipboardUnavailable:
286 def __call__(self, *args, **kwargs):
--> 287 raise PyperclipException(EXCEPT_MSG)
288
289 def __bool__(self) -> bool:
PyperclipException:
Pyperclip could not find a copy/paste mechanism for your system.
For more information, please visit
https://pyperclip.readthedocs.io/en/latest/introduction.html#not-implemented-error
Risposte
Ho notato che il problema aveva a che fare con il seguente blocco di codice: pandas / io / clipboard / init .py # L523-L526
Se modifico la riga if "Microsoft" in f.read():
e sostituisco "Microsoft" con "microsoft" ("m" minuscola), la funzionalità degli appunti funziona per me.
Non una buona soluzione a lungo termine, ma sicuramente una semplice patch fino a quando i team di panda non lo integreranno.
Se avvii Ubuntu (da Windows Store, la nota 20.04 è disponibile) dal buon vecchio cmd.exe (dato %LOCALAPPDATA%\Microsoft\WindowsApps
in PATH
) tramite
> start ubuntu1804
(senza start
rimanere in cmd.exe, possibile ma non consigliabile.) Funziona con Ubuntu in un terminale Linux. Correndo lì (meglio in una venv)
(venv) > pip install pyperclip
(venv) > python -c "import pyperclip; print(pyperclip.paste())"
dovrebbe funzionare, cioè stampare il contenuto degli appunti. Allo stesso modo posso copiare / incollare di nuovo su Windows.
Nota l'icona arancione di Ubuntu:

Se l'obiettivo è ottenere il contenuto degli appunti di Windows da una shell WSL, puoi farlo tramite PowerShell (disponibile in WSL):
powershell.exe Get-Clipboard
Se stai cercando di accedervi da Python in esecuzione in WSL, dovrai usare qualcosa come subprocess.Popen () per eseguire il comando sopra.