python - 通过python执行带空格的sudo命令

标签 python python-2.7

大家好,我有一个问题。

我正在执行一个 python 脚本,需要运行 sudo 命令才能继续。这是命令:

sudo /etc/init.d/test restart

问题是,无论我如何执行它,它都只运行 sudo 和/etc/init.d/test 并返回:

sudo: /etc/init.d/test: command not found

问题似乎是重启没有与命令一起发送。

这些是我尝试运行命令的方法:

使用操作系统的尝试 1

os.system('sudo /etc/init.d/test restart')

使用子进程的尝试 2

x = subprocess.Popen(['sudo','/etc/init.d/test','restart'])
x.communicate()

再次尝试使用子进程3

x = subprocess.Popen(['sudo','/etc/init.d/test restart'])
x.communicate()

这实际上返回了:

sudo: /etc/init.d/test restart: command not found

这没有意义,因为如果我直接在系统上执行该命令,它就可以工作。
关于如何做到这一点有什么想法吗?

最佳答案

#!/usr/bin/env python
import subprocess,getpass
password = getpass.getpass()
#proc = subprocess.Popen(
#  ['sudo','-p','','-S','/etc/init.d/test','restart'],
#   stdin=subprocess.PIPE)
proc = subprocess.Popen(
    ['sudo','-p','','-S','echo','restart'],
    stdin=subprocess.PIPE)
proc.stdin.write(password+'\n')
proc.stdin.close()
proc.wait()

关于python - 通过python执行带空格的sudo命令,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15787817/

相关文章:

python - 获取文件的关联文件类型图标

Python:更快的索引操作

Python 扩展了一个空列表错误?

python - Django - 在views.py内部使用我自己的REST API的正确方法?

Python 极其令人费解的正则表达式 unicode 行为

python - 合并字典列表,同时合并相似 ke 的值

python - 在非常大的文件中引用 CSV 记录

python - 需要在 bash 中传递 python 数组中的对象

python - 从 numpy 数组中选择最小索引的第一次出现

python - 使用 .iteritems() 遍历 Python 字典中的键值