繁体   English   中英

Python子进程执行远程服务器命令

[英]Python subprocess to execute remote server commands

我必须执行驻留在远程计算机中的python脚本,并且正在使用以下脚本:

from subprocess import call
ip = 1.1.1.1
call(["ssh", ip, "\"cd scripts; python -u get_details.py --web_server\""])

低于错误:

bash: cd scripts; python -u get_details.py --web_server: command not found

直接在bash命令行中运行:

 ssh 1.1.1.1 "cd scripts; python -u get_details.py --web_server"

在下面询问输入并返回输出

 1. USA
 2. UK
 Choose input: 1

 www.cisco_us.com is up 

请让我看看如何在python中达到此目的的修复或其他更好的方法

您需要删除引号,因为外壳会将其删除。 这个:

ssh 1.1.1.1 "cd scripts; python -u get_details.py --web_server"

等效于:

call(["ssh", ip, "cd scripts; python -u get_details.py --web_server"])

如果以这种方式使用call ,则客户端不涉及任何外壳(这是一件好事),而仅在服务器端不涉及。

确保始终正确准备参数的一种方法是使用python的shlex模块。 您可以执行以下操作:

import shlex
import subprocess

ip = '1.1.1.1'
cmd = "ssh {} 'cd scripts; python -u get_details.py --web_server'".format(ip)

subprocess.call(shlex.split(cmd))

它可以确保正确准备您的论点。


我还建议您看看Paramiko 这是一个Python库,可帮助您管理SSH连接。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM