shell脚本使用python远程执行

时间:2010-09-23 17:41:14

标签: python unix shell

有没有办法在Windows上使用Python来执行位于远程Unix机器上的shell脚本?

P.S:对于迟到的编辑感到抱歉。我知道帕拉米科,但我想知道是否有办法没有它。首先,可以使用subprocess()吗?

7 个答案:

答案 0 :(得分:14)

您需要ssh到远程计算机,如果您有适当的凭据,则可以调用shell脚本。

使用ssh,您可以轻松使用提供ssh自动化的paramiko模块

一个典型的例子:

import paramiko
import sys
import os
import os.path
passwd = ""
ssh = paramiko.SSHClient()
ssh.set_missing_host_key_policy(paramiko.AutoAddPolicy())
ssh.connect('servername', username, password=passwd)
stdin, stdout, stderr = ssh.exec_command('df -h')
x = stdout.readlines()
print x
for line in x:
    print line
ssh.close()

将“df -h”命令替换为您的shell脚本。

答案 1 :(得分:3)

在python中没有任何'电池包含'模块用于远程shell执行。我建议调查Fabric,它提供了一个非常好的界面,可以在远程机器上通过SSH工作,可能比paramiko好一点。你甚至可以在Windows上安装Fabric ......

答案 2 :(得分:2)

我有一个多处理和子流程,我没有测试但应该基于docs工作......

服务器:

import subprocess
from multiprocessing.managers import BaseManager
def get_subprocess_module():
    return subprocess
class MyManager(BaseManager):
    pass
MyManager.register( 'subprocess', get_subprocess_module )
MyManager(address=('', 50000), authkey='makecrazy').get_server().serve_forever()

远程客户端:

from multiprocessing.managers import BaseManager
class MyManager(BaseManager):
    pass
MyManager.register('subprocess')
manager = MyManager(address=('dns.of.remote.server',50000),authkey='makecrazy')
manager.connect()
remoteSubprocess = manager.subprocess()
rc = remoteSubprocess.call(['ls', '-aplh'])

答案 3 :(得分:1)

当然,通常通过ssh协议(对于“安全shell”)支持Python,例如通过paramiko第三方扩展程序。

答案 4 :(得分:1)

我会使用PexpectPlink执行此操作。

答案 5 :(得分:0)

您需要在远程计算机上运行某种服务器,或者自己运行并自行执行。使用众多预先编写的Python服务器之一来监听客户端并启动shell脚本并不困难。

身份验证对您来说可能是也可能不是问题;请注意,其他任何人都可以按照您执行的相同步骤操作,并可能获得相同的结果。您不希望允许intarwubs上的任何人启动您的脚本!

答案 6 :(得分:0)

如果您不想使用paramiko,请尝试使用telnetlib。您可以使用它来执行远程命令。