2010-03-05 5 views
0

우분투 서버 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" 

호 Wever에게 내 SU crontab을이를 추가 할 때 :

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

출력의 내용이된다 : 여기 무엇을 놓치고

sh: blkid: not found 

? 파이썬 명령은 특정 SH 관련 명령에 대해서만 모듈을 사용합니까? 난 그냥 시스템 명령을 실행하고 구문 분석 할 수있는 변수에 출력을 캡처하려고합니다.

답변

2

$PATH과 루트 (os.environ['PATH'])를 셸이 아닌 파이썬에서 보는 경우 문제가있을 수 있습니다. 루트의 PATH는 일반적으로 매우 보수적입니다 (위험하지 않을 것입니다!). blkid은 절대 경로를 지정하지 않고 실행 중이므로 루트에있는 경로가 아니라 PATH에 있음을 쉽게 나타낼 수 있습니다.

쉘 프롬프트에서 sudo su 또는 echo $PATH과 같이 which blkid을 직접 처리하십시오. 문제가 있는지 신속하게 확인할 수 있습니다. 그런 다음 지금 수행하고있는 것처럼 베어 키 식별자가 아닌 getoutput 호출에서 blkid의 절대 경로를 사용하여 문제를 해결합니다.

+0

감사합니다. 나는 항상 cronjob을 실행할 때 경로가 실제로 쉘에 입력하는 것과 같다고 생각했습니다. –

0

cron 작업의 환경 (및 PATH)이 로그인 쉘과 반드시 ​​같을 필요는 없습니다.