无法使用子进程执行sudo命令。

问题描述 投票:0回答:1

我想用Python Subprocess编辑intel_backlight文件夹中的亮度文件来改变亮度。

不能用sudo priv运行脚本。

已经尝试了大部分的方法,但仍然没有成功......你能不能帮我一下,我到底哪里出了问题。

尝试了以下方法。

  1. 用xbacklight包不工作.

  2. 用xrandr颜色变暗,但没有亮度。

  3. 改变文件的值(在shell中用sudo工作,但想通过python用sudo调用python文件)。

#
command = "sudo  echo " + "'" + str(new_brightness_level) + "'" + ">" + "/sys/devices/pci0000:00/0000:00:02.0/drm/card0/card0-eDP-1/intel_backlight/brightness"
    subprocess.Popen(command,shell=True)

command2 = "echo {} | sudo -S   tee /sys/devices/pci0000:00/0000:00:02.0/drm/card0/card0-eDP-1/intel_backlight/brightness ".format(new_brightness_level).split()

 c2 =subprocess.Popen(command2,shell=True,stdin=subprocess.PIPE,universal_newlines=True)
        res = c2.communicate(sudo_pass + '\n')[1]
#
command = "echo " + "'" + str(new_brightness_level) + "'" + "sudo -S > /sys/devices/pci0000:00/0000:00:02.0/drm/card0/card0-eDP-1/intel_backlight/brightness"
cmd2 = subprocess.Popen(['sudo', '-S'] + command.split(),stdin=subprocess.PIPE,stdout=subprocess.PIPE,stderr=subprocess.PIPE)

先谢谢大家的帮助!!!

python subprocess sudo tee
1个回答
0
投票

尝试了不同的东西,终于找到了一个可行的解决方案。

command3 =  "echo {} | tee /sys/devices/pci0000:00/0000:00:02.0/drm/card0/card0-eDP-1/intel_backlight/brightness ".format(new_brightness_level)
command4 =  " sudo -S  bash -c '{}' ".format(command3)
c1 =subprocess.Popen(command4,shell=True,stdin=subprocess.PIPE,universal_newlines=True)
res = c1.communicate(sudo_pass + '\n')[1]

在命令3中创建了没有Sudo的命令。

在命令4中,首先添加了sudo和-S(用于从通信功能中获取密码),然后使用bash shell,它将作为sudo执行,因此所有的命令将使用sudo运行

请纠正我的错误,并添加进一步的信息,如果任何人都觉得非常感激。

© www.soinside.com 2019 - 2024. All rights reserved.