Python脚本通过startup.sh调用subprocess启动C应用失败问题
Python脚本开机启动时调用C应用失败的解决办法
问题现象
使用Python 3.8编写程序,通过subprocess调用一个C语言编写的应用:
- 直接在命令行运行该C应用正常
- 直接执行Python脚本时,
subprocess调用该C应用也正常 - 将Python脚本加入
startup.sh设置开机启动后,C应用进程无法启动
原调用代码
def start_getPID(): #sp.call('app start watchpy', shell=True) subprocess.run('app start watchpy', shell=True) logging.info('Starting watchpy') time.sleep(5) try: getPID = int(subprocess.run(["pidof", "-s", "watchpy"], capture_output=True).stdout) logging.info(f'watchpy PID: {getPID}') except: logging.warning('An exception occurred') time.sleep(5) start_getPID()
排查过程
日志显示代码持续抛出异常,排查后发现app start watchpy命令未正确执行:
- 尝试
subprocess.call、subprocess.Popen等多种调用方式均无效 - 报错提示找不到
app命令
解决方法
确认是系统PATH环境变量问题:开机启动脚本的PATH环境变量不包含app命令所在路径。改用绝对路径调用后问题解决,调整后的代码如下:
subprocess.call(["/mnt/legato/system/bin/app", "start","watchpy"])
内容的提问来源于stack exchange,提问作者user1886476
相关产品推荐
相关产品推荐

