Mac环境下如何在主Python文件中运行另一个Python文件?解决权限拒绝异常
解决Mac上Python调用另一个脚本时的权限拒绝问题
一、修复当前os.system调用的权限问题
你用os.system('/Users/valiev/code/python/telegram_bot_parser/parser.py')触发权限拒绝,主要有两种解决方式:
- 给脚本添加执行权限
打开终端执行以下命令,给目标脚本赋予可执行权限:
同时要确保chmod +x /Users/valiev/code/python/telegram_bot_parser/parser.pyparser.py的第一行添加shebang声明,指定Python解释器:#!/usr/bin/env python3 - 直接用Python解释器调用脚本
无需修改权限,直接在os.system里指定Python解释器运行脚本:os.system('python3 /Users/valiev/code/python/telegram_bot_parser/parser.py')
二、更优的Python内部调用方案
os.system是比较老旧的调用方式,推荐用以下两种更灵活的方案:
1. 导入模块调用函数
如果parser.py的执行逻辑可以封装成函数,先修改parser.py:
def main(): # 这里写原来的脚本执行逻辑 pass if __name__ == '__main__': main()
然后在主文件中导入并调用:
# 先把脚本所在目录加入Python搜索路径 import sys sys.path.append('/Users/valiev/code/python/telegram_bot_parser') import parser # 在callback函数里替换原os.system代码 parser.main()
2. 使用subprocess模块
subprocess能更精准地控制脚本执行,还能捕获输出、错误信息:
import subprocess # 在callback函数中替换原代码 subprocess.run(['python3', '/Users/valiev/code/python/telegram_bot_parser/parser.py'])
如果需要检查脚本是否执行成功,添加check=True参数;要捕获输出则加上capture_output=True。
内容的提问来源于stack exchange,提问作者Александр Валиев
相关产品推荐
相关产品推荐

