html

每当我喝完咖啡,我就打开我的笔记本电脑,做一系列准备工作。这些任务并不是我工作的直接部分,但就像热身运动一样,它们为我一天的节奏奠定了基础。这包括打开一些应用程序,比如浏览器、日历、我的笔记和其他几个应用程序,以及打开几个浏览器标签。这些都不耗时,而且现在已经成为一种习惯,以至于我甚至没有意识到自己在做这些。

但我注意到,当我一次性打开所有东西时,我会在甚至还没决定自己实际需要做什么之前就陷入反应模式。这就是我想要解决的问题,所以我写了一个脚本,在启动我的Mac后运行一次,以准备我整个工作环境。

我是如何设置自动化脚本的

我是如何设置自动化脚本的

一个整洁的Python脚本完成了工作

一个整洁的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来自动化你的生活

用Python来自动化你的生活