2013-04-24 5 views
0

이 작은 파이썬 스크립트를 업데이트 용으로 만들었지 만 (아직 모든 명령을 입력하지 않았으며 하나의 업데이트 명령을 사용하려고했습니다) 시스템에서 루트/수퍼 유저 모드로 들어간 후 오작동합니다.python sys 스크립트를 잘못 작성했습니다

누군가가 문제/버그를 지적 할 수 있는지 궁금합니다.

import os 

print "\t Entering Upgrade Mode " 

if os.system("su")==1: 
     print "passed" 
     os.system("apt-get update") 
     os.system(exit) 
else: 
     print "failed" 
+0

어쨌든 apt-get 업데이트로 스크립트를 호출하게 되었습니까? – Antimony

+0

스크립트는'su'라는 이름이 붙은 스크립트입니까? –

+0

그 이름은 ** l_update ** –

답변

2

su으로 문의하는 것이 좋습니다. 하위 쉘을 종료 할 때까지 호출이 종료되지 않습니다 (이 경우 루트에서 로그 아웃합니다). 이것은 이후의 모든 호출이 (아마도) 일반 사용자로 다시 실행된다는 것을 의미합니다.

import os 

print "\t Entering Upgrade Mode " 

os.system("sudo apt-get update") 

는 또한 su 후속 명령을 처리 할 -c 플래그를 요구, 예를 들면 :

는 다음 시도

su -c "echo Hello" 

아마도 subprocess을 사용해야합니다. os.system은 더 이상 사용되지 않습니다.

+0

나는 루트에서 로그 아웃하는 것이 스크립트를 차단 해제한다는 사실은 우발적이라고 확신한다. 'system' 호출은 명령을 파이썬 코드를 실행하는 쉘의 서브 쉘에 전달한 다음, 서브 쉘이 리턴 될 때까지 블록합니다. 'su'를 실행하는 서브 쉘은 종료 할 때까지 리턴되지 않으므로 파이썬 프로그램은'system' 호출을 무기한 차단합니다. –

+0

@ sr2222 - 우리는 똑같은 말을하고 있습니다. 아마도 더 정확한 문구를 사용해야했을 것입니다 : 루트에서 로그 아웃한다고 말했을 때, 하위 쉘에서 로그 아웃, 즉 exit을 입력하는 것을 언급했습니다! – jmetz

+0

그래, 승진 특권이 문제 였고, 여전히 실행중인 서브 쉘이 아닌 것처럼 말한 것뿐입니다. –

관련 문제