自动化无聊的东西 - pyperclip 副本不会将任何东西保存到搁置文件

问题描述 投票:0回答:0

我需要帮助。尝试完成“自动化无聊的东西”——第 9 章“可更新的多剪贴板”。我们正在创建一个带有命令行参数的脚本。

  • 如果你说“保存”和一个关键字——关键字被保存为搁置文件中的一个键,pyperclip 将剪贴板内容复制为值。
  • 如果你说“列表”但没有关键字,你会得到一个复制到剪贴板的键列表。
  • 如果您只提及您的关键字,您会将值复制到剪贴板。

实际应用:可能作为字典或词汇表...

我们应该在最后创建一个 bat 文件来运行这段代码,但无论我做什么,它都不会将任何内容复制到搁置文件中。我发现许多线程和其他人都遇到了这个问题,但没有解决问题的方法,或者我可能还不够了解建议的修复方法。我在 Windows 上运行它。

这是我运行文件的方式:

运行窗口 - 直接路径 将文件路径复制到我的剪贴板作为要存储的文本 运行窗口:py C:\Users\Andrea\mu_code\9_Updatable_multi-clipboard\mcb.py保存路径 -> 搁置文件已创建 - 无内容 (0 KB)

将香蕉这个词复制到我的剪贴板 运行窗口:py C:\Users\Andrea\mu_code\9_Updatable_multi-clipboard\mcb.py 路径 我将剪贴板粘贴到文档中,然后得到“banana”。所以它没有在搁置文件中找到密钥,我的剪贴板也没有更新。

Bat文件版本(文件名为mcb.bat): 复制到剪贴板的文件路径 运行窗口:mcb保存路径 关键错误 + 现在搁置文件是在与 bat 文件相同的目录中创建的?这是关键错误的原因吗?它只出现在 .bat 文件中

按键错误: *追溯(最后一次通话): getitem 中的文件“C:\Users\Andrea\AppData\Local\Programs\Python\Python310\lib\shelve.py”,第 111 行 值 = self.cache[key] KeyError: '路径'

在处理上述异常的过程中,又出现了一个异常:

回溯(最后一次通话): 文件“C:\Users\Andrea\mu_code\9_Updatable_multi-clipboard\mcb.py”,第 14 行,位于 mcbShelf[sys.argv[2]] == pyperclip.paste()*

最后:这本书还建议“如果你运行 Windows,你可以通过创建一个名为 mcb.bat 的批处理文件轻松地从运行窗口运行这个脚本,其中包含以下内容: @pyw.exe C:\Python34\mcb.pyw %*" 尝试使用 .py 和 .pyw 但“没有这样的文件或目录”(总是用相应的扩展名保存我的文件并更新 .bat 文件中的路径)

我不知道还能做什么。我唯一偏离书中示例的部分是我为项目创建了一个子文件夹,我的 python 文件保存在该子文件夹中,因为我不希望在此过程中创建的所有文件弄乱我的主文件夹。

非常感谢任何修复。我可能缩进错了,漏掉了一个括号,或者数据在驱动器上找不到匹配项,但我没有想法,我似乎找不到我的错误。已经浪费了很多时间。

我的代码:

#! python3
# mcb.pyw - Saves and loads pieces of text to the clipboard..
# Usage:
# py.exe mcb.pyw save <keyword> - saves clipboard under keyword in shelve file
# py.exe mcb.pyw <keyword> - loads value for keyword to clipboard
# py.exe mcb.pyw list - loads ALL keywords to clipboard

import shelve, pyperclip, sys

mcbShelf = shelve.open('mcb')              

# saving the clipbaord content
if len(sys.argv) == 3 and sys.argv[1].lower() == 'save':
   mcbShelf[sys.argv[2]] == pyperclip.paste()
    # if pos. 1 = save, then keyword is used as the key in mcbShelf
    # to store text from clipboard
elif len(sys.argv) == 2:
        # if pos. 1 = list, then copy alls keys to clipboard
    if sys.argv[1].lower() == 'list':
        pyperclip.copy(str(list(mcbShelf.keys())))
            # if only keyword, then find it in keys and copy content to clipboard
    elif sys.argv[1] in mcbShelf:
        pyperclip.copy(mcbShelf[sys.argv[1]])

mcbShelf.close()                            

这是我到目前为止尝试过的。我没有收到错误消息,代码运行:

  • 用 py 试过。 extension 和 pyw(不应该影响,但无论如何都试过了)
  • 试过用Run中的路径直接运行或者用bat文件运行
  • 尝试重命名 bat 文件,以防出现问题,将两者都称为“mcb”
  • 试图一个接一个地导入模块而不是一行,什么也没改变
  • 运行代码时尝试将关键字放在括号中:
python shelve pyperclip
© www.soinside.com 2019 - 2024. All rights reserved.