簡體   English   中英

運行 Ubuntu 18 LTS 的 WSL2 上出現 Pyperclip 錯誤,同時嘗試訪問從 windows 復制的數據

[英]Pyperclip error on WSL2 running Ubuntu 18 LTS while trying to access data copied from windows

I am using IPython 7.16.1 (Python 3.7.7) on Ubuntu 18.04 running in WSL2 via Windows Terminal Preview (1.2.2234.0) on Windows 10 build 20190 (though the issue is not limited to IPython, it is with the shell itself) . 我正在嘗試對從 Windows 復制的數據(即 WSL 外部)使用pandas.read_clipboard() 但是,收到以下錯誤:

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

我確實理解這是由於 WSL 不支持顯示,但是,因為我可以將粘貼數據復制到 WSL 和 Windows,所以應該有一種機制可以訪問 windows 剪貼板。 有針對這個的解決方法嗎?

我已經按照這里的建議查看了xclipxselQTpy ,而這里沒有幫助。

完整的堆棧跟蹤:

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

我注意到這個問題與以下代碼塊有關: pandas/io/clipboard/ init .py#L523-L526

如果我if "Microsoft" in f.read():行,並將 "Microsoft" 替換為 "microsoft"(小寫 "m"),那么剪貼板功能對我有用。

這不是一個好的長期解決方案,但絕對是一個簡單的補丁,直到 pandas 團隊集成它。

如果您從舊的PATH (給定%LOCALAPPDATA%\Microsoft\WindowsApps in Microsoft

    > start ubuntu1804

(如果不start ,您將留在 cmd.exe - 可能但不推薦。)它在 Linux 終端中運行 Ubuntu。 在那里跑步(最好在 venv 中)

    (venv) > pip install pyperclip
    (venv) > python -c "import pyperclip; print(pyperclip.paste())"

應該工作,即打印您的剪貼板內容。 同樣,我可以復制/粘貼回 Windows。

注意橙色 Ubuntu 圖標: 在此處輸入圖像描述

如果目標是從 WSL shell 獲取 Windows 剪貼板內容,那么您可以通過 powershell(在 WSL 中可用)來實現:

powershell.exe Get-Clipboard

如果您嘗試從在 WSL 中運行的python中訪問它,那么您需要使用類似 subprocess.Popen() 的東西來運行上面的命令。

截至今天,運行 Pandas 1.2.3 這仍然是一個問題。

我正在使用的一個簡單的解決方法可能對其他人有幫助:

在 Windows 中將一些結構化數據復制到剪貼板后

import pandas as pd
import pyperclip

pd.read_csv(io.StringIO(pyperclip.paste()), sep='\t')

這給出了與 pd.read_clipboard() 相同的結果

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM