我正在尝试从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“,它运作正常。
答案 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'")