You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何用Bash/Python统计开源代码实际使用频率(学术经费申请用)

这个思路真的很务实——比起虚的下载量,实际运行频次才是科研成果被真正采用的硬证据,太适合经费申请里的影响力证明了。我帮你梳理下Python和Bash两种具体实现方案,完全满足你提到的「可关闭、无网络不影响、开源合规」这些要求:

Python 实现方案

核心逻辑是在代码入口处嵌入一段可选的统计逻辑,通过Google Analytics的测量协议发送请求(不需要依赖前端脚本,适合后端/命令行代码),同时做开关控制和异常处理,确保不影响主功能。

import requests
import socket
import os
from datetime import datetime

# 开关控制:用户可通过环境变量关闭,也可以直接修改这个变量
ENABLE_USAGE_TRACKING = os.getenv("DISABLE_MY_CODE_TRACKING", "false").lower() != "true"

def track_usage():
    if not ENABLE_USAGE_TRACKING:
        return
    
    # GA测量协议端点(官方通用地址,无需自定义URL)
    ga_endpoint = "https://www.google-analytics.com/collect"
    # 替换为你的GA跟踪ID(UA-XXXXXXXXX-X 或 GA4的G-XXXXXX)
    tracking_id = "UA-XXXXXXXXX-X"
    # 生成匿名用户标识:用主机名保证同一机器的统计归为同一用户,也可以用随机ID存在本地
    user_id = socket.gethostname()
    
    # GA事件统计参数(按需调整标签/类别)
    params = {
        "v": "1",
        "tid": tracking_id,
        "cid": user_id,
        "t": "event",
        "ec": "CodeUsage",  # 事件类别:标记是代码使用统计
        "ea": "Executed",   # 事件动作:标记代码被执行
        "el": "MainModule", # 事件标签:可区分代码的不同模块
        "an": "MyOpenSourceTool", # 你的工具名称
        "av": "1.0.0"       # 工具版本
    }
    
    try:
        # 设置3秒超时,避免网络问题卡住代码
        requests.get(ga_endpoint, params=params, timeout=3)
    except requests.exceptions.RequestException:
        # 无网络/请求失败时静默跳过,完全不影响主流程
        pass

# 在代码入口调用统计函数
if __name__ == "__main__":
    track_usage()
    # 你的核心业务逻辑
    print("Executing my open source research code...")

关键细节说明

  • 开关控制:用户只需设置环境变量export DISABLE_MY_CODE_TRACKING=true,再运行代码就能关闭统计,无需修改代码本身。
  • 无网络兼容:通过try-except捕获所有请求异常,失败时直接跳过,主代码完全不受影响。
  • 隐私合规:一定要在README/代码注释里明确告知用户:这个统计功能仅用于科研经费申请,可随时关闭,且仅收集匿名的运行频次和主机标识(无敏感数据)。
  • GA配置:先在GA后台创建媒体资源拿到跟踪ID,如果用GA4(G-开头),需要调整参数为POST请求,具体参考GA官方测量协议文档即可。
Bash 实现方案

如果你的代码是Shell脚本,用curl就能实现同样的逻辑,同样兼顾开关和无网络处理:

#!/bin/bash

# 开关控制:用户设置环境变量 DISABLE_TRACKING=1 即可关闭统计
ENABLE_TRACKING=${DISABLE_TRACKING:-0}

track_usage() {
    if [ "$ENABLE_TRACKING" -eq 1 ]; then
        return
    fi

    # 替换为你的GA跟踪ID
    TRACKING_ID="UA-XXXXXXXXX-X"
    # 匿名用户标识:用主机名区分不同机器
    USER_ID=$(hostname)
    # GA事件统计参数
    GA_PARAMS="v=1&tid=$TRACKING_ID&cid=$USER_ID&t=event&ec=CodeUsage&ea=Executed&el=BashScript&an=MyOpenSourceTool&av=1.0.0"

    # 发送请求:超时3秒,静默输出避免干扰脚本正常运行
    curl -s --connect-timeout 3 "https://www.google-analytics.com/collect?$GA_PARAMS" > /dev/null 2>&1
}

# 调用统计函数
track_usage

# 你的核心脚本逻辑
echo "Running my bash research script..."

关键细节说明

  • 开关控制:用户运行export DISABLE_TRACKING=1后再执行脚本,统计功能就会失效。
  • 无网络兼容:curl设置了3秒连接超时,所有输出重定向到/dev/null,完全不影响脚本的正常输出和流程。
  • 隐私说明:同样要在脚本头部注释或README里明确告知用户统计功能的用途和关闭方式。
额外优化建议
  1. 避免重复统计:如果你的代码可能被同一用户短时间内多次运行,可以在本地存一个时间戳文件(比如~/.my_code_last_tracked),每天只统计一次,避免数据膨胀。
  2. 数据展示:GA后台可以直接查看事件的统计报表(比如每日运行次数、来自哪些主机),导出成图表后直接可以放到经费申请材料里,非常直观。
  3. 替代方案:如果不想用GA,也可以自己用Flask搭一个简单的统计接口,把请求数据存到SQLite数据库里,但GA免费且自带可视化,更省心。

内容的提问来源于stack exchange,提问作者llionevans

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.08 11:43:17