Skip to content

Instantly share code, notes, and snippets.

@cedricbonhomme
Forked from barneygale/sudo.py
Last active April 25, 2016 19:43
Show Gist options
  • Save cedricbonhomme/9d6d50bba83e0ee29b54fda2a8566ad2 to your computer and use it in GitHub Desktop.
Save cedricbonhomme/9d6d50bba83e0ee29b54fda2a8566ad2 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