2017-12-19 5 views
1

this answer ("쉘 명령어는 파이썬에서 호출하지 마십시오. 쉘 명령어가 할 수있는 모든 것을 파이썬에서 할 수 있습니다."), 많은 사람들에게 흔히있는 조언입니다. 어떻게하면 선택한 개인을 실행할 수 있습니까? routine (그리고 오직이 루틴 만) 다른 사용자, 예를 들어 파이썬 프로그램 내에서. 루트, 파이썬에서 (다소 안전하다) 방식?다른 사용자 (예 : root)로 Python 루틴을 실행하는 파이썬적인 방법은 무엇입니까?

예를 들어, 나는 몇 가지 코드에서 이런 루틴을 가지고 : 나는 뿌리를 할 필요가없는 경우

import os 
import signal 
import subprocess 

def kill_proc(pid, k_signal = signal.SIGINT, sudo = False): 
    if sudo: 
     subprocess.Popen(['sudo', 'kill', '-%d' % k_signal, '%d' % pid]).wait() 
    else: 
     os.kill(pid, k_signal) 

, 난 그냥이 예에서 os.kill(pid, k_signal)를 호출 할 수 있습니다. 그러나 예제에서 신호를 보내기위한 수퍼 유저 권한이 필요한 경우 서브 프로세스의 명령을 통해 신호를 전송해야합니다. 대신 os.kill을 어떻게 사용할 수 있습니까?

+2

인용 한 답변은 전면에 과장되어 있습니다. 많은 무게를주지 마십시오. 쉘 명령이란 무엇입니까? 'cp'가 하나라면, 왜'firefox'가 아닌가? –

+0

@ n.m. 나는 overgeneralisation을 알고있다.) 그럼에도 불구하고, 나는 그것에 대한 답이 있는지 없는지에 관심이 있다는 것을 인정해야한다. –

답변

1

다른 사용자로 파이썬 함수를 실행할 수 없습니다.

유닉스 계열 OS는 각 프로세스를 특정 사용자와 연관시킵니다. 원래 소유자가 루트가 아니면 프로세스를 다른 사용자에게 재 할당 할 수 없습니다. 파이썬 함수는 프로세스가 아니며 자체 사용자를 가질 수 없습니다.

+0

적어도 당신이해야 할 일은 항상 적절한 사용자와 관련된 다른 프로세스를 시작하는 것입니다. 어떤 질문을 통해 "pythonic 추상화"가 있는지 여부를 묻습니다. ''다중 처리 (multiprocessing) '와 같은 모듈은 일반적인 함수 호출처럼 보이게 할 것입니다. * (저는 이것이 쉽게 기괴해질 수 있음을 잘 알고 있습니다 -''다중 처리' '와 같은 또 다른 파이썬 인터프리터 프로세스를 시작하는 것은 단지 호출을위한 것입니다 내 예와 같은 작은 방법.) * –

관련 문제