1

我在 Windows 10 build 20190 上通过 Windows Terminal Preview (1.2.2234.0) 在 WSL2 中运行的 Ubuntu 18.04 上使用 IPython 7.16.1 (Python 3.7.7)(尽管问题不限于 IPython,它与外壳本身有关) . 我正在尝试使用pandas.read_clipboard()从 Windows 复制的数据,即在 WSL 之外。但是,收到以下错误:

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 剪贴板。有针对这个的解决方法吗?

我已经看过xclip, xselQTpy按照这里的建议,在这里并没有帮助。

完整的堆栈跟踪:

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
4

4 回答 4

3

我注意到这个问题与以下代码块有关:pandas/io/clipboard/ init .py#L523-L526

如果我编辑该行if "Microsoft" in f.read():并将“Microsoft”替换为“microsoft”(小写“m”),那么剪贴板功能对我有用。

这不是一个好的长期解决方案,但绝对是一个简单的补丁,直到 pandas 团队整合它。

于 2020-12-16T19:26:40.387 回答
1

如果您从旧的 cmd.exe(%LOCALAPPDATA%\Microsoft\WindowsApps在 中给出PATH)通过

    > start ubuntu1804

start没有你会留在 cmd.exe 中——可能但不推荐。)它在 Linux 终端中运行 Ubuntu。在那里跑步(最好在 venv 中)

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

应该工作,即打印您的剪贴板内容。同样,我可以复制/粘贴回 Windows。

注意橙色的 Ubuntu 图标: 在此处输入图像描述

于 2020-08-27T14:51:52.673 回答
1

截至今天,运行 Pandas 1.2.3 这仍然是一个问题。

我正在使用的一个简单的解决方法可能对其他人有帮助:

在 Windows 中将一些结构化数据复制到剪贴板后

import pandas as pd
import pyperclip

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

这给出了与 pd.read_clipboard() 相同的结果

于 2021-03-18T09:52:46.870 回答
0

如果目标是从 WSL shell 获取 Windows 剪贴板内容,那么您可以通过 powershell(在 WSL 中可用)来实现:

powershell.exe Get-Clipboard

如果您尝试从在 WSL 中运行的python中访问它,那么您需要使用类似 subprocess.Popen() 的东西来运行上面的命令。

于 2020-08-25T18:21:37.437 回答