[英]& 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.