Errore di Pyperclip su WSL2 con Ubuntu 18 LTS durante il tentativo di accedere ai dati copiati da Windows

Aug 23 2020

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, QTpycome 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

1 Maksim Dec 17 2020 at 02:26

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.

1 thoku Aug 27 2020 at 21:51

Se avvii Ubuntu (da Windows Store, la nota 20.04 è disponibile) dal buon vecchio cmd.exe (dato %LOCALAPPDATA%\Microsoft\WindowsAppsin PATH) tramite

    > start ubuntu1804

(senza startrimanere 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:

kerasbaz Aug 26 2020 at 01:21

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.