【发布时间】:2021-06-10 06:01:05
【问题描述】:
我编写了一个 python 程序,它需要第一个命令行参数才能从终端运行。该程序可用于在使用特定关键字运行时将文本复制到剪贴板。
~ python3 mclip.py 'agree'
这个用例只是一个理解练习,我如何在 macOS 上运行批处理文件(或 macOS 术语中的 shell 脚本)。
我创建了以下shell脚本并将其保存为mclip.command:
#!/usr/bin/env bash
python3 /Users/Andrea_5K/mclip.py
我的想法是从聚光灯输入窗口执行我的 shell 脚本,传递参数“同意”。我该怎么做?
在 Windows 上,批处理文件看起来像这样 (mclip.bat):
@py.exe C:\path_to_my_file\mclip.py %*
@pause
我可以按 WIN-R 并输入mclip *argument* 来运行程序。但是我怎样才能在 Mac 上做同样的事情呢?我无法在聚光灯下键入mclip agree,这不像在 WIN-R 中那样工作。
#! python3
# mclip.py - A multi-clipboard program.
TEXT = {
'agree': """Yes, I agree. That sounds fine to me.""",
'busy': """Sorry, can we do this later this week or next week?""",
'upsell': """Would you consider making this a monthly donation?""",
}
import sys, pyperclip
if len(sys.argv) < 2:
print('Usage: python mclip.py [keyphrase] - copy phrase text')
sys.exit()
keyphrase = sys.argv[1] # first command line arg is the keyphrase
if keyphrase in TEXT:
pyperclip.copy(TEXT[keyphrase])
print('Text for ' + keyphrase + ' copied to clipboard.')
else:
print('There is no text for ' + keyphrase)
【问题讨论】:
-
由于 mac 是基于 unix 的,它更像是 linux 而不是 windows。第一个命令应该在 MAC imo 上运行。
-
呃,你为什么不直接在你的 Python 脚本中放一个带有 python3 的 shebang 呢? env python3 的工作方式与 env bash 完全一样?!
-
如果你总是需要提供
agree作为参数,你为什么不修改脚本不需要它呢?或者在脚本中提供参数? -
@MarkSetchell:我并不总是希望“同意”作为第一个命令行参数。它可以是任何一个单词字符串。我的程序只是获取 sys.argv[1] 参数并使用在命令行上输入的任何单词。
-
我做了几个测试,似乎 Spotlight 不希望你这样做。我已删除我的答案,以免推迟其他潜在的回答者。让我们看看是否有人提出了可行的解决方案。另一种方法可能是在您的桌面上创建一个可双击的脚本,这确实有效。