0

Ubuntu Server 9.10,这是我的文件 test.py

import commands
blkid = commands.getoutput('blkid')
print blkid

当我手动运行(作为 SU)时:

python test.py

我按预期得到了blkid的输出:

/dev/sda1: UUID="3f0ac5bb-f0da-4574-81f5-77844530b561" TYPE="ext4"
/dev/sda5: UUID="67df0e7c-74fb-47dd-8520-ad720fbed67d" TYPE="swap"
/dev/sdb1: UUID="85466892-8dae-461c-95da-b8f91c2e766b" TYPE="ext3"
/dev/sdc1: UUID="91b84635-21c2-4d9a-84f8-2bbaab16d41f" SEC_TYPE="ext2" TYPE="ext3"
/dev/sdd1: UUID="6a52c830-0029-4154-80cb-f17274eb6fed" SEC_TYPE="ext2" TYPE="ext3"

但是,当我将此添加到我的 SU crontab 时:

* * * * * python /home/myusername/test.py > /home/myusername/output

输出内容变为:

sh: blkid: not found

我在这里想念什么?Python命令模块是否仅适用于某些特定于 SH 的命令?我只是尝试运行系统命令并将输出捕获到我可以解析的变量中。

4

2 回答 2

2

问题可能出在您$PATH与 root 的比较(os.environ['PATH']如果您在 Python 而不是 shell 中查看它;-)。root 的 PATH 通常非常保守(如果不这样做会很危险!)并且由于您在blkid没有指定绝对路径的情况下运行,这可能很容易意味着它在您的 PATH 上而不是 root 上。

因此which blkid,在 shell 提示符下执行您自己的操作,sudo su或者无论如何成为 root,并且echo $PATH- 您可以快速验证问题。然后你通过在调用中使用 blkid 的绝对完整路径来修复它,而不是像你现在所做的那样getoutput仅仅使用裸标识符。blkid

于 2010-03-05T03:15:40.943 回答
0

cron 作业的环境(和 PATH)不一定与您的登录 shell 相同。

于 2010-03-05T03:15:59.827 回答