sudo su user -c,参数不起作用

时间:2017-02-20 12:03:57

标签: python linux

我正在尝试从python执行命令作为另一个“用户”:

command = "sudo su user -c player --standard=1 -o 2"
subprocess.Popen(command.split(), shell=False, stdin=None, stdout=None, stderr=None, close_fds=True)   

-c 后的所有内容都会导致麻烦。 知道如何使用我的程序播放器的参数执行此命令吗?

当我使用“player --standard = 1 -o 2”创建单独的2.py脚本时(当然是在子进程中)并通过“sudo su user -c / home / user / 2”从我的第一个脚本调用此脚本.py“,它运作正常。

1 个答案:

答案 0 :(得分:0)

command.split()生成列表['sudo', 'su', 'user', '-c', 'player', '--standard=1', '-o', '2'],这不是您需要的。 su期望命令在-c之后作为单个参数运行。

最简单的做法可能是手工构建列表,而不使用split()

command = ['sudo', 'su', 'user', '-c', 'player --standard=1 -o 2']

如果您真的想从字符串开始,shlex模块可能会有所帮助:

import shlex
command = shlex.split("sudo su user -c 'player --standard=1 -o 2'")