【问题标题】:sudo su user -c with arguments not workingsudo su user -c 参数不起作用
【发布时间】:2017-02-20 21:00:58
【问题描述】:

我正在尝试以另一个“用户”的身份从 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",它工作正常。

【问题讨论】:

  • 试试 sudo -i ...
  • 我应该在哪里添加-i,好吗?我试过 sudo -i su... 或 sudo su user -i... 但不起作用
  • 与你的问题的 python 部分不严格相关,但你应该考虑使用sudo-u 选项而不是运行su
  • 删除 su 并用 -i 替换它

标签: python linux


【解决方案1】:

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'")

【讨论】:

    猜你喜欢
    • 2017-10-02
    • 1970-01-01
    • 2013-09-21
    • 2015-10-20
    • 1970-01-01
    • 2017-05-02
    • 2013-09-03
    • 1970-01-01
    相关资源
    最近更新 更多