2

我有一个在小型服务器上运行的 python 脚本,它以三种不同的方式调用 - 从另一个 python 脚本中、通过 cron 或通过 gammu-smsd(具有出色的移动实用程序 [gammu] 的 SMS 守护程序)。该脚本用于维护,并包含以下用于测量系统上已用空间的组件(可能这可以在 Python 中实现,但这又快又脏):

reportdict['Used Space'] = subprocess.check_output(["df / | tail -1 | awk '{ print $5; }'"], shell=True)[0:-1]

奇怪的是,只有当脚本被从 gammu-smsd 运行的 shell 脚本调用时,这一行才会失败。即使 CalledProcessError 对象的输出属性包含正确的输出,该行也会失败,并出现 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 调用!为什么会这样?使用子流程时,我要求将来参考...

4

1 回答 1

2

Gammu SMSD 将在所有文件描述符关闭的情况下调用脚本(请参阅文档),这可能是失败的原因。

于 2012-06-20T12:39:31.130 回答