Navigation Menu

Skip to content

Instantly share code, notes, and snippets.

@hasantayyar
Forked from barneygale/sudo.py
Created April 14, 2016 18:22
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save hasantayyar/734b3b0e02756b68f2a09620014c57ad to your computer and use it in GitHub Desktop.
Save hasantayyar/734b3b0e02756b68f2a09620014c57ad to your computer and use it in GitHub Desktop.
import sys, marshal, functools, subprocess
child_script = """
import marshal, sys, types;
fn, args, kwargs = marshal.load(sys.stdin)
marshal.dump(
types.FunctionType(fn, globals())(*args, **kwargs),
sys.stdout)
"""
def sudo(fn):
@functools.wraps(fn)
def inner(*args, **kwargs):
proc_args = [
"sudo",
sys.executable,
"-c",
child_script]
proc = subprocess.Popen(
proc_args,
stdin=subprocess.PIPE,
stdout=subprocess.PIPE)
send_data = marshal.dumps((
fn.func_code,
args,
kwargs))
recv_data = proc.communicate(send_data)[0]
return marshal.loads(recv_data)
return inner
@sudo
def whoami():
import os
return "I am: %d" % os.getuid()
if __name__ == '__main__':
print whoami()
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment