html
每当我喝完咖啡,我就打开我的笔记本电脑,做一系列准备工作。这些任务并不是我工作的直接部分,但就像热身运动一样,它们为我一天的节奏奠定了基础。这包括打开一些应用程序,比如浏览器、日历、我的笔记和其他几个应用程序,以及打开几个浏览器标签。这些都不耗时,而且现在已经成为一种习惯,以至于我甚至没有意识到自己在做这些。
但我注意到,当我一次性打开所有东西时,我会在甚至还没决定自己实际需要做什么之前就陷入反应模式。这就是我想要解决的问题,所以我写了一个脚本,在启动我的Mac后运行一次,以准备我整个工作环境。
我是如何设置自动化脚本的
一个整洁的Python脚本完成了工作
在评估这个自动化时,我对是选择一个连接Gmail、Google Docs和Chrome等不同节点的n8n工作流,还是选择老牌的Python感到困惑。我决定选择后者,因为它对工作流提供了更多的控制。
这个脚本简化了我每天早上启动计算机后的日常流程,处理了我在实际开始工作之前必须完成的许多基本手动任务。这个流程包括打开特定的浏览器标签,显示例行提醒,启动Slack,并通过Docker运行我自托管的应用程序。
脚本不是一次性启动所有内容,而是有意设置了步骤。当它第一次运行时,只打开我需要的内容来帮助我定位自己。日历弹出,我的笔记应用打开,使用我的工作配置文件加载一个浏览器窗口。电子邮件和Slack延迟五到十分钟。这短暂的暂停让我在还没决定要做什么之前,避免陷入被动状态。
浏览器的设置比简单的“打开Chrome”命令更有目的性。脚本以准备工作的状态打开浏览器。这意味着加载我当前正在处理的文档、我的任务管理器(如Asana)和我用于研究的工具,如NotebookLLM。
脚本中一个更有用的部分是日历感知行为。我的笔记本电脑根据我一天的安排表现不同。如果我第一场会议在10点之前,日历会全屏打开,并且我的会议笔记文档会自动加载。如果中午之前没有会议,脚本会打开写作应用和深度工作任务列表。在周五,它会切换模式,打开报告文档和分析仪表板。提取今天的日历并根据它进行调整,其实比听起来简单,但这让系统感觉智能。
这一切都通过一个桌面快捷方式来实现
你还可以在脚本中添加更多功能
这个脚本还负责设置后台环境。它启动Docker,并启动在我的Mac上本地运行的自托管服务,以便在我需要时它们已准备就绪。还有一个轻量级的早间简报步骤,提取今天的会议,突出我的前三个任务,并提醒我常常忘记的事项。虽然我决定通过邮件获取这个简报,但你也可以使用内置库subprocess调用通知系统并发送简单消息。
我在下面附上了具体的脚本,你可以复制,替换占位符,然后直接运行。它开箱即用,但并不是一刀切的。这种设置反映了我的工作方式,而不是每个人都应该这样。例如,我使用Slack进行沟通,但你可能在使用Teams。我把笔记保存在Joplin,而你可能更喜欢Notion或Google Keep。
你还可以为此添加更多功能。例如,你可以收集和可视化数据。你可以运行后台脚本,记录活动窗口并跟踪专注时间,将这些信息存储在文本文件或CSV中。从那里,你可以进一步构建一个简单的工具,使用像Replit这样的工具来可视化数据。这样你就可以查看每天的工作表现,比如在不同应用上花费的时间。它还能帮助你按照特定的顺序来处理任务,将电子邮件和消息等沟通检查推迟到例行程序的最后。这样,像计划和技能提升这样的高优先级任务就会优先进行,而不是让任何反应性任务插入其中。
#!/usr/bin/env python3
import subprocess
import time
import os
from datetime import datetime
import webbrowser
CONFIG = {
"chrome_profile": "Profile 1",
"urls": {
"current_doc": "https://docs.google.com/document/d/YOUR_DOC_ID",
"task_manager": "https://app.asana.com/0/home",
"research_tool": "https://notebooklm.google.com",
"email": "https://mail.google.com",
},
"apps": {
"notes": "Notes",
"calendar": "Calendar",
"slack": "Slack",
},
"docker_services": [],
"delays": {
"email": 300,
"slack": 600,
},
def run_command(cmd, shell=False):
try:
result = subprocess.run(cmd, shell=shell, capture_output=True, text=True, check=False)
return result.stdout.strip()
except Exception as e:
print(f"出错: {e}")
return "返回空字符串"
def open_app(app_name): # 定义打开应用程序的函数
subprocess.Popen(["open", "-a", app_name])
def open_url(url, profile=None):
if profile: # 如果有配置文件:
chrome_path = "/Applications/Google Chrome.app/Contents/MacOS/Google Chrome"
subprocess.Popen([chrome_path, f"--profile-directory={profile}", url]) # 打开指定配置文件的Chrome浏览器
else: # 否则:
webbrowser.open(url)
def notify(title, message): # 定义通知函数
script = f'显示通知 "{message}",标题为 "{title}"'
subprocess.run(["osascript", "-e", script])
def start_docker(): # 定义启动Docker的函数
for service in CONFIG["docker_services"]: # 遍历配置中的Docker服务:
if service.endswith("docker-compose.yml"):
service_dir = os.path.dirname(os.path.expanduser(service))
subprocess.Popen(["docker-compose", "up", "-d"], cwd=service_dir)
else:
subprocess.Popen(["docker", "start", service])
def get_calendar_mode():
now = datetime.now()
hour = now.hour
is_friday = now.weekday() == 4
# 检查是否有早会(上午10点之前)
# 在实际版本中:从 Google 日历 API 获取数据
has_early_meeting = False # 暂时未实现
if is_friday:
return "星期五"
elif has_early_meeting:
return "会议"
elif hour < 10:
return "深度工作"
else:
return "标准"
def meeting_mode():
打开应用(CONFIG["apps"]["calendar"])
时间.sleep(2)
运行命令("""
osascript -e '告诉应用程序 "日历"
激活
tell application "System Events"
按下 "f" 键,同时按住 {command 和 control}
end tell
end tell
""", shell=True)
打开当前文档的链接(CONFIG["urls"]["current_doc"], CONFIG["chrome_profile"])
def 深度工作模式():
打开应用(CONFIG["apps"]["notes"])
打开当前文档的链接(CONFIG["urls"]["task_manager"], CONFIG["chrome_profile"])
def 周五模式():
# 请将这些替换为实际的网址
报告文档链接 = "https://docs.google.com/document/d/YOUR_REPORTING_DOC"
分析链接 = "https://your-analytics-dashboard.com"
打开网址(报告文档链接, CONFIG["chrome_profile"])
打开网址(分析链接, CONFIG["chrome_profile"])
def 常规模式():
打开日历应用(CONFIG["apps"]["calendar"])
打开应用(CONFIG["apps"]["notes"])
打开当前文档的链接(CONFIG["urls"]["current_doc"], CONFIG["chrome_profile"])
time.sleep(1)
打开当前文档的链接(CONFIG["urls"]["task_manager"], CONFIG["chrome_profile"])
time.sleep(1)
打开当前文档的链接(CONFIG["urls"]["research_tool"], CONFIG["chrome_profile"])
def 展示简报():
现在 = datetime.now()
简报 = f"""早安 - {现在.strftime('%A, %B %d')}
今天的会议安排:
- (从日历 API 中提取)
今天的首要任务:
1.
2.
3.
提醒:[你的提醒内容]
print(briefing)
notify("Morning", "Briefing ready")
def main():
start_docker()
show_briefing()
mode = get_calendar_mode()
if mode == "meeting":
meeting_mode()
elif mode == "deep_work":
deep_work_mode()
elif mode == "friday":
friday_mode()
else:
standard_mode()
# delayed opens
subprocess.Popen([
"python3", "-c",
f"import time; time.sleep({CONFIG['delays']['email']}); "
f"import subprocess; subprocess.run(['open', '{CONFIG['urls']['email']}'])"
subprocess.Popen([
"python3", "-c",
f"import time; time.sleep({CONFIG['delays']['slack']}); "
f"import subprocess; subprocess.run(['open', '-a', '{CONFIG['apps']['slack']}'])"
if __name__ == "__main__":
main()
用Python来自动化你的生活
热门跟贴