我需要帮助。尝试完成“自动化无聊的东西”——第 9 章“可更新的多剪贴板”。我们正在创建一个带有命令行参数的脚本。
实际应用:可能作为字典或词汇表...
我们应该在最后创建一个 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()
这是我到目前为止尝试过的。我没有收到错误消息,代码运行: