page contents

解放双手:让 Python 脚本像 Shell 一样直接执行

还在重复输入 python script.py?掌握这个 Unix 魔法,让你的 Python 脚本拥有与 Shell 脚本同等的"特权"。

attachments-2026-09-5AXsCTX46a9a20c0cb9a1.png还在重复输入 python script.py?掌握这个 Unix 魔法,让你的 Python 脚本拥有与 Shell 脚本同等的"特权"。

为什么你的脚本还不够"酷"?

想象一下这个场景:你写了一个超棒的设备连接脚本,每次使用时却要输入:

python3 harmony-device-connector.py --device HUAWEI_P40

而你的同事使用 Shell 脚本时,只需要:

./deploy.sh --env production

为什么 Python 脚本不能像 Shell 脚本一样"直接执行"? 答案就在两个神奇的字符中:#!

揭秘:Shebang(Hashbang)的魔力

Shebang 是什么?

Shebang(又称 Hashbang)是 Unix/Linux 系统中的一个魔法注释,格式简单却功能强大:

#!/usr/bin/env python3# 或#!/usr/bin/python3

当你将这两个字符放在脚本文件开头时,你就赋予了脚本"自解释"的能力。

内核的秘密握手协议

当你执行 ./script.py 时,发生了一件有趣的事情:

Linux 内核:检查文件前两个字节

发现 "#!":哦,这是个脚本,需要解释器!

读取后续路径:找到 /usr/bin/env python3

实际执行:/usr/bin/env python3 ./script.py

这就是为什么你不需要手动输入 python 前缀的原因——内核已经帮你做好了!

实战:三步创建"可直接执行"的 Python 脚本

第一步:正确的 Shebang 写法

强烈推荐使用 env 查找法:

#!/usr/bin/env python3

为什么这是最佳实践?

✅ 兼容不同系统(Ubuntu、macOS、CentOS)

✅ 尊重用户的 Python 环境配置

✅ 支持虚拟环境中的 Python

其他写法(了解但不推荐):

#!/usr/bin/python3          # Ubuntu/Debian 系统#!/usr/local/bin/python3    # macOS 系统默认#!/opt/homebrew/bin/python3 # macOS Homebrew 安装

第二步:完整的脚本模板

#!/usr/bin/env python3# -*- coding: utf-8 -*-"""harmony-device-connector.pyHarmonyOS 设备连接与调试工具作者:你的名字版本:1.0.0"""import sysimport argparseimport subprocessimport loggingfrom pathlib import Pathdef setup_logging():    """配置专业日志输出"""    logging.basicConfig(        level=logging.INFO,        format='%(asctime)s - %(name)s - %(levelname)s - %(message)s',        datefmt='%Y-%m-%d %H:%M:%S'    )    return logging.getLogger(__name__)def check_adb_devices():    """检查连接的 ADB 设备"""    try:        result = subprocess.run(            ["adb", "devices"],            capture_output=True,            text=True,            timeout=10        )        return result.stdout    except subprocess.TimeoutExpired:        return"超时:无法获取设备列表"    except FileNotFoundError:        return"错误:adb 命令未找到,请确保已安装 Android SDK"def main():    """主函数:处理命令行参数和业务逻辑"""    logger = setup_logging()        # 创建专业的参数解析器    parser = argparse.ArgumentParser(        description='HarmonyOS 设备连接工具',        epilog='示例:./harmony-device-connector.py --device HUAWEI_P40 --log-level DEBUG'    )        parser.add_argument('--device', help='指定设备型号')    parser.add_argument('--log-level', default='INFO',                        choices=['DEBUG', 'INFO', 'WARNING', 'ERROR'],                       help='设置日志级别')    parser.add_argument('--timeout', type=int, default=30,                       help='操作超时时间(秒)')        args = parser.parse_args()    logger.setLevel(getattr(logging, args.log_level))        logger.info(f"启动 HarmonyOS 设备连接工具")    logger.info(f"参数:device={args.device}, timeout={args.timeout}s")        # 检查设备连接    devices_output = check_adb_devices()    logger.debug(f"ADB 输出:\n{devices_output}")        if"device"in devices_output:        logger.info("✅ 设备连接成功")        # 这里添加你的设备操作逻辑        return0    else:        logger.error("❌ 未检测到可用设备")        return1if __name__ == "__main__":    exit_code = main()    sys.exit(exit_code)

第三步:赋予执行权限并运行

# 1. 添加执行权限(让文件可执行)chmod +x harmony-device-connector.py# 2. 像 Shell 脚本一样直接运行!./harmony-device-connector.py --device HUAWEI_P40# 3. 查看帮助文档./harmony-device-connector.py --help

高级技巧:像系统命令一样使用你的脚本

技巧一:放入 PATH,随处调用

# 1. 创建个人命令目录(如果不存在)mkdir -p ~/.local/bin# 2. 复制脚本并去掉 .py 后缀(更像系统命令)cp harmony-device-connector.py ~/.local/bin/hdc# 3. 添加到 PATH(添加到 ~/.bashrc 或 ~/.zshrc)echo 'export PATH="$HOME/.local/bin:$PATH"' >> ~/.bashrcsource ~/.bashrc# 4. 现在可以在任何目录直接调用!hdc --device HUAWEI_P40

技巧二:与 Makefile 完美集成

# Makefile.PHONY: connect deploy testconnect:    ./harmony-device-connector.py --device HUAWEI_P40deploy:    ./deploy.py --env staging --paralleltest:    ./run_tests.py --unit --integration --coverageclean:    ./cleanup.py --all

技巧三:创建脚本集合(Unix 哲学)

# 项目结构bin/├── hdc          # 设备连接├── deploy       # 部署脚本├── backup       # 备份工具└── monitor      # 监控脚本# 统一调用方式./bin/hdc --help./bin/deploy production

为什么专业开发者都爱用 Shebang?

理由一:极致的开发体验

之前:

python3 src/tools/device_connector.py --ip 192.168.1.100 --port 5555

之后:

./tools/device-connector --ip 192.168.1.100# 或者device-connector --ip 192.168.1.100

理由二:无缝的团队协作

新成员加入项目时,不需要记忆:

"这个脚本是用 python2 还是 python3 写的?"

"需要什么特殊的命令行参数才能运行?"

只需要:

./setup-environment  # 一切就绪

理由三:跨平台的一致性

无论是在:

Ubuntu 服务器

macOS 开发机

WSL2 中的 Linux

Docker 容器

你的脚本都能以相同的方式运行。

最佳实践清单

总是使用 Shebang

#!/usr/bin/env python3

添加文件编码声明(Python 3 默认是 UTF-8,但显式声明更清晰)

# -*- coding: utf-8 -*-

使用专业的参数解析 

import argparse  # 而不是手动处理 sys.argv 

实现正确的退出码

if __name__ == "__main__":    sys.exit(main())  # 0 表示成功,非 0 表示失败

控制文件权限

chmod 755 script.py    # 所有人可读可执行chmod 700 script.py    # 仅自己可执行(敏感脚本)

真实场景对比

场景:日常开发工作流

没有 Shebang 的日常:

$ cd ~/projects/harmony-sdk$ python3 tools/device_manager.py list$ python3 tools/device_manager.py connect --serial 123456$ python3 tools/log_collector.py --output logs/

使用 Shebang 的优雅体验:

$ cd ~/projects/harmony-sdk$ ./tools/device-manager list$ ./tools/device-manager connect --serial 123456$ ./tools/log-collector --output logs/

更进一步的体验:

# 将工具目录加入 PATH$ export PATH="$HOME/projects/harmony-sdk/tools:$PATH"# 在任何地方直接调用$ device-manager --help$ log-collector --output ./debug-logs

从今天开始改变你的脚本习惯

Shebang 不仅仅是两个字符——它是一种思维方式,是 Unix 哲学"万物皆文件"的体现。当你赋予 Python 脚本直接执行的能力时:

你提高了效率:减少打字,降低出错

你提升了专业性:脚本更像"一等公民"

你遵循了标准:与整个 Unix/Linux 工具链保持一致

你改善了协作:让团队成员更容易使用你的工具

立即行动

打开你最近写的一个 Python 脚本,在文件顶部添加:

#!/usr/bin/env python3

然后在终端执行:

chmod +x 你的脚本.py./你的脚本.py

感受一下这种流畅的体验。这就是专业开发者的日常——用最小的摩擦,创造最大的价值。

记住:好的工具应该隐形,让你的注意力集中在真正重要的事情上。Shebang 就是让工具"隐形"的那一步。

更多相关技术内容咨询欢迎前往并持续关注好学星城论坛了解详情。

想高效系统的学习Python编程语言,推荐大家关注一个微信公众号:Python编程学习圈。每天分享行业资讯、技术干货供大家阅读,关注即可免费领取整套Python入门到进阶的学习资料以及教程,感兴趣的小伙伴赶紧行动起来吧。

attachments-2022-05-rLS4AIF8628ee5f3b7e12.jpg

 

  • 发表于 2026-09-04 09:37
  • 阅读 ( 52 )
  • 分类:Python开发

你可能感兴趣的文章

相关问题

0 条评论

请先 登录 后评论
Pack
Pack

2484 篇文章

作家榜 »

  1. Pack 2484 文章
  2. 轩辕小不懂 2403 文章
  3. 小柒 2228 文章
  4. Nen 576 文章
  5. 王昭君 216 文章
  6. 文双 71 文章
  7. 小威 64 文章
  8. Cara 36 文章