Python:如何通过SSH执行需要`sudo`

时间:2017-08-23 15:01:48

标签: python subprocess

我需要使用SSH在远程Linux机器上运行守护程序。

Deamon的名字是pigpiod,它属于pigpio模块(控制Raspberry Pi的GPIO),Ubuntu Mate 16.04。

执行不需要sudo的命令(例如 - ls) - 脚本运行正常,而需要sudo的脚本运行失败。

adress ='192.168.2.112',是运行此守护程序的远程Linux。

  

以下代码失败(正在运行sudo pigpiod):

def runpigpiod_remote(adress):
    result = subprocess.run(['ssh','guy@'+adress,'sudo','pigpiod'])
  

以下代码成功(运行ls -l

def runpigpiod_remote(adress):
    result = subprocess.run(['ssh','guy@'+adress,'ls','-l'])

为了检查subprocess.run是否能够执行sudo +命令 - 我在同一台机器上尝试了localy并且它成功了:

def run_process():
    try:
        check_output(["pidof","pigpiod"])
        print("pigpiod already loaded")
    except:
        subprocess.CalledProcessError
        print("Not Loaded")
        subprocess.run(['sudo','pigpiod'])
        if os.system("pgrep -x "+name)==0:
            print("Loaded successfully")

1 个答案:

答案 0 :(得分:2)

代码已更改(感谢@Hamuel的评论) - 如proper way to sudo over ssh

中所述
def runpigpiod_remote(adress):
    result = subprocess.run(['ssh','-t','guy@'+adress,'sudo','pigpiod'])