2013-07-13 4 views
-1

나는 이미 자바에 대해 알고 있으며, 리눅스에서 파이썬을 시험해보기로했다.파이썬 - 서브 프로세스에서 출력을 가져와 IF와 비교하기

스크립트가 루트로 실행되는지 여부를 확인하기위한 간단한 프로 우지를 만들었습니다. 그렇지 않은 경우 암호를 요청합니다.

1000 
You are NOT running this script as root. 
Please enter your Linux password: 

이제 문제는 IF가 작동하지 않는, 또는 좀 더 정확하게 uid != 0는 내가하고 싶은 일을하지 않는다는 것입니다 :

import subprocess; 
process = subprocess.Popen(['id', '-u'], stdout=subprocess.PIPE) 
uid, err = process.communicate() 
print(uid) 

if uid != 0: 
    lpass = raw_input("\nYou are NOT running this script as root.\n Please enter your Linux password:") 

이 출력됩니다. IF 문은 루트로 스크립트를 실행할 때도 항상 false로 표시됩니다. 또한 실패한 uid == 1000을 시도했습니다.

나는 '다른 것'을 문자열이나 정수와 비교하고 있기 때문에 이것이 의심 스럽다. 그러나 나는 그 무언가를 얻는 방법이나 그것을 변환하는 방법을 모른다. 그러나 이것은 평신도의 추측이다. 하프.

답변

0

Popen.communicate 3.x에서 문자열 또는 바이트의 튜플을 반환합니다.

uidb'1000\n'과 비슷합니다. 따라서 if int(uid.strip()) != 0을 사용하십시오.

+0

감사합니다. 작동했지만 어떻게 반환했는지 어떻게 알았습니까? http://docs.python.org/2/library/subprocess.html을보고 있는데 통신 기능에는 아무 것도 없습니다. 나는 또한 type()을 사용해 보았지만 어떤 이유로 작동하지 않았다. – user2579116

+0

설명서에 언급이 없으면 Google에 알려줍니다. 구글이 일할 수 있다면. 나는 그것을 스스로 시도한다. 코드가 길지 않아서 2.x와 3.x에서 모두 시도해 보았습니다. 이 코드는 내 PC에서 잘 작동합니다. :) 바보 예. @ user2579116 – zhangyangyu

+0

어, 그때 혼란스러워 할거야 : 3 어쨌든, 덕분에 톤. – user2579116

0

너는 것들을 너무 복잡하게 만들고있어. 당신이 유효 사용자 ID를 확인하는 NEET 경우, 사용

import os 
if os.geteuid() != 0: 
    ... 

이에 대한 subprocess 올바른 방법이 아니다 사용.

관련 문제