繁体   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