我有一个在小型服务器上运行的python脚本,它以三种不同的方式调用 - 从另一个python脚本,cron或gammu-smsd(一个带有精彩移动实用程序[gammu]的SMS守护程序)。该脚本用于维护,并包含以下kludge来测量系统上的已用空间(可能这可以在Python中实现,但这很快且很脏):
reportdict['Used Space'] = subprocess.check_output(["df / | tail -1 | awk '{ print $5; }'"], shell=True)[0:-1]
奇怪的是,当从gammu-smsd运行的shell脚本调用脚本时,此行仅失败。即使CalledProcessError对象的output属性包含正确的输出,该行也会因CalledProcessError异常而失败,并显示“返回退出状态2”。 shell命令序列中唯一会产生这种错误状态的命令是awk,状态2表示致命错误。
如果带有此行的python脚本由cron,另一个python脚本或命令行调用,则此行可以正常工作。我试图修复脚本的环境,我认为这一定是问题。最后虽然我输入了stderr = subprocess.STDOUT,如下所示:
reportdict['Used Space'] = subprocess.check_output(["df / | tail -1 | awk '{ print $5; }'"], stderr=subprocess.STDOUT, shell=True)[0:-1]
这是一个调试措施,可以帮助我弄清楚某些输出是否会出现在stderr上。但在此之后,脚本开始工作,即使是从gammu-smsd调用!为什么会出现这种情况?我在使用子进程时要求将来参考...