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

时间:2018-10-01 11:43:31

标签: python bash python-2.7 shell subprocess

我必须执行驻留在远程计算机中的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中实现此目的的修复或其他更好的方法

2 个答案:

答案 0 :(得分:2)

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

groupedData

等效于:

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"]) ,则客户端不涉及任何外壳程序(这是一件好事),而仅在服务器端。

答案 1 :(得分:0)

确保始终正确准备参数的一种方法是使用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连接。