复制然后粘贴在 python 终端 mac 中产生垃圾

copy then paste produces garbage in python terminal mac

我在 Mac OS X (10.14.3) 上使用文本编辑器 (Sublime Text 3),在另一个 window 终端 window 运行 python (3.7) 解释器.

我从 Sublime(使用 cmd+c)复制的代码是

def count_numbers():
    for i in range(10):
        if i % 3 == 0 : 
            print (i)

count_numbers()

但是当我将粘贴复制到终端时得到的输出(我包含了打开 python 解释器的命令)是:

$ python
Python 3.7.2 (default, Dec 30 2018, 08:55:50) 
[Clang 10.0.0 (clang-1000.11.45.5)] on darwin
Type "help", "copyright", "credits" or "license" for more information.

[这里是我按 cmd + v]

>>> def count_numbers():
...         return a * x + b
... z=[invcdf(random()) for i in range(10)]
  File "<stdin>", line 3
    z=[invcdf(random()) for i in range(10)]
    ^
SyntaxError: invalid syntax
>>>     if t2 is None:
  File "<stdin>", line 1
    if t2 is None:
    ^
IndentationError: unexpected indent
>>>         # print (i)
... 
>>> count_numbers()

这个其他混淆代码来自 python 我昨天写的。从那以后我用了无数次copy/paste,所以我不明白为什么我最近的副本(cmd + v)是在引导昨天的工作,并且有明显的缩进错误,今天的代码等等。

键入 command+shift+v 也好不到哪里去:只是不同的垃圾。

这到底是怎么回事?

Mac OS X : 10.14.3 python 由 MacPorts
安装 未安装 Tkinter:我不喜欢 IDLE。

我使用的配置与您的类似,命令行 + Xcode,我尝试将您的代码从 IDE 复制并粘贴到命令行中,一切都按预期工作。所以我相信问题不在命令行中。我会检查剪贴板(Finder -> Edit -> Show Clipboard)以查看代码是否被正确复制,它应该与 IDE 中的外观完全一样。如果没有,那么我会建议注释掉不需要的代码并直接从命令行 运行ning 文件。

.py 文件可以直接从命令行 运行 而无需使用命令 python3 path/to/file 启动 python 解释器,为此你可以直接将文件拖到终端中,然后它会自动进入它的路径。这可以通过在 .py 文件本身中使用解释器 shebang #! 来进一步简化。解释器的路径可以通过导入systemimport sysprint(sys.executable)找到。这给出了解释器的路径,然后将 shebang 添加到路径并将其放在 .py 文件的顶部,对我来说它看起来像这样:#!/Library/Frameworks/Python.framework/Versions/3.7/bin/python3,但由于您是从 MacPort 安装的,它可能是不同的。 shebang 允许脚本在命令行中 运行 只需输入文件路径即可。即,将文件拖到终端中,按回车键,然后 运行s。您还可以使用 shift + up arrow 的终端快捷方式,然后再次按回车键进入 运行 最后一个命令,从而节省您不断将文件拖入终端的时间。

好的,

终于查明是pboard进程损坏了。
最好的修复方法是在 activity 监视器或终端

中终止 pboard 进程

使用

http://tips.applenws.com/copy-paste-not-working-on-mac-heres-how-to-fix-a-stuck-clipboard/2018/tips-tricks

现在一切正常。