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とルートの問題です(os.environ['PATH']シェルではなくPythonで見ている場合;-)。ルートのPATHは通常、非常に保守的であり(そうでない場合はリスクがあります!)blkid、絶対パスを指定せずに実行しているため、ルート上ではなくパス上にあることを簡単に意味する場合があります。

したがってwhich blkid、シェルプロンプトで自分のように実行するsudo suか、とにかくルートになりecho $PATHます。そうすれば、問題をすばやく確認できます。getoutput次に、現在行っている裸の識別子ではなく、呼び出しでblkidの絶対完全パスを使用して修正しblkidます。

于 2010-03-05T03:15:40.943 に答える
0

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

于 2010-03-05T03:15:59.827 に答える