質問

のUbuntuサーバー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-特定のコマンドのためですか?私は、システムコマンドを実行して、私が解析できるという変数に出力をキャプチャしようとしています。

役に立ちましたか?

解決

あなたがPythonのではなく、シェルの中でそれを見ている場合は、

問題は、ルートの($PATH対あなたのos.environ['PATH']である可能性があり;-)。 rootのPATHは、典型的には非常に保守的な(それはしてはならないため、それは危険なことだろう!)、あなたは簡単にそれがあなたのPATH上にあることを意味するものではなく、rootのこと絶対パスを指定せずにblkidを実行していることからである。

だから、シェルプロンプト、which blkidまたはとにかくrootになり、そしてsudo suで自分としてecho $PATHを行う - あなたは急速に問題を確認することができます。そして、あなたはあなたが今やっているようBLKIDのgetoutputコールで絶対完全なパスだけではなく、裸の識別子blkidを使用して、それを修正します。

他のヒント

cronジョブの環境(およびPATH)は、必ずしもログインシェルと同じではありません。

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top