Python中os.system调用子脚本返回码103问题排查求助
os.system('script_customer_update')执行失败的问题 从你描述的情况来看,直接运行子脚本正常,但通过os.system调用返回码103,大概率是执行环境差异或者路径问题导致的。我来拆解几个常见的排查方向:
先确认子脚本的调用路径是否正确
主脚本运行时的工作目录,可能和你手动打开子脚本时的目录不一样!比如你在/home/user/projects下运行主脚本,但子脚本在/home/user/scripts里,直接写script_customer_update肯定找不到。解决办法很简单:- 用子脚本的绝对路径调用,比如:
os.system('/home/user/scripts/script_customer_update.py') - 或者先切换到子脚本所在目录再执行:
import os os.chdir('/home/user/scripts') os.system('script_customer_update.py')
- 用子脚本的绝对路径调用,比如:
检查Python解释器的一致性
你说已安装Python3,但有可能主脚本调用时用的是Python2,而子脚本依赖Python3的特性。可以用sys.executable指定明确的Python解释器,确保和你手动运行时用的是同一个:import sys, os os.system(f'{sys.executable} /full/path/to/script_customer_update.py')另外,子脚本开头的shebang行(比如
#!/usr/bin/env python)如果写的是python,可能会指向系统默认的Python2,改成#!/usr/bin/env python3就能强制用Python3执行。环境变量差异是隐形坑
Python Shell和主脚本的运行环境(比如PATH、PYTHONPATH)可能不一样,导致子脚本依赖的模块或外部命令找不到。你可以在主脚本和Python Shell里分别执行print(os.environ['PATH']),对比两者的差异。如果发现子脚本依赖的路径不在主脚本的PATH里,直接在主脚本里添加:import os os.environ['PATH'] += ':/path/to/dependency'换用
subprocess模块排查错误os.system的返回码信息太有限了,推荐用subprocess模块代替,它能捕获子脚本的标准输出和错误输出,帮你定位具体问题:import subprocess result = subprocess.run(['/full/path/to/script_customer_update.py'], capture_output=True, text=True) print("返回码:", result.returncode) print("子脚本输出:", result.stdout) print("子脚本错误信息:", result.stderr)运行这段代码,错误输出里大概率会告诉你到底是哪里出问题了——比如某个模块找不到、权限不够之类的。
最后检查权限(概率较低)
如果是Linux/macOS系统,确保子脚本有执行权限:chmod +x /full/path/to/script_customer_update.py不过你手动能运行的话,这个可能性不高,但可以顺手排查下。
内容的提问来源于stack exchange,提问作者Andreas

