繁体   English   中英

& 符号不会复制到剪贴板

[英]& sign will not copy to clipboard

我正在尝试使用下面的代码将 & 符号复制到剪贴板。 但它只是给了我一个错误“| 在这个时候是意外的。”

import os

def addToClipBoard(text):
    command = 'echo ' + text.strip() + '| clip'
    os.system(command)

addToClipBoard('&') 

有没有办法让它通过一些调整来工作,还是我必须使用另一种方式?

您需要引用(或转义) &字符:

import os

def addToClipBoard(text):
    command = "echo '{}' | clip".format(text.strip())
    os.system(command)

addToClipBoard('&') 

在 Bash 中, &是一个控制运算符。 它是一个内置的 shell,意思是,它实际上是 Bash 工具集的核心部分。 (从BashItOut - & 在命令行上复制)


编辑

正如@CharlesDuffy 在评论中提到的那样,出于安全原因,有更好的方法来做到这一点。

考虑字符串$(rm -rf ~/*)'$(rm -rf ~/*)' - 尝试将其复制到剪贴板将导致删除主目录,即使有额外的引号,因为引号在字符串本身内部取消它们。

解决方案是使用shlex.quote()作为添加文字引号的更安全方法。

import os
import shlex

def addToClipBoard(text):
    command = "printf '%s\n' {} | clip".format(shlex.quote(text))
    os.system(command)

addToClipBoard('&') 

注意:最后一部分基于@CharlesDuffy 的评论。

您运行 shell 命令将文本复制到剪贴板,但 '&' 登录 shell 命令用于在后台运行命令,所以也许这就是它不起作用的原因。

您可以使用 python 直接将文本复制到剪贴板,如下所示:

import pyperclip
pyperclip.copy('The text to be copied to the clipboard.')

来自这里的代码: 将文本复制到剪贴板的 Python 脚本

os.system本身并不知道| 字符应该重定向标准输入,并且根据操作系统,它不一定通过执行此操作的 shell 运行您的命令。 如果您改用subprocess ,则可以直接将数据传递给标准输入,例如:

import subprocess

def add_to_clipboard(text: str) -> None:
    subprocess.run("clip", text=True, input=text.strip())

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM