我需要使用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")
答案 0 :(得分:2)
代码已更改(感谢@Hamuel的评论) - 如proper way to sudo over ssh
中所述def runpigpiod_remote(adress):
result = subprocess.run(['ssh','-t','guy@'+adress,'sudo','pigpiod'])