从本地python脚本运行远程python脚本并传递一些参数

时间:2015-06-15 17:24:08

标签: python

我有remote python script,其中包含以下代码:

    from os import system
    import sys


    if __name__ == '__main__':

        arg1 = sys.argv[1] // ip address of host
        arg2 = sys.argv[2]

        cmd_txt = "ssh -i pem-file user@" + arg1 + " 'cd /folder1/folder2/ && java -cp jar-file.jar pack1.pack2.py-file -f folder1/folder2/file_" + ts + ".txt'"
        system(cmd_txt)

现在我想从我本地计算机上的remote python script运行此python script并将两个参数传递给它arg1& arg2。所以基本上我的local python script会调用remote python script并将两个参数传递给它。我知道如何从另一个python脚本执行本地python脚本,但不知道远程python脚本。我怎样才能做到这一点?

UPDATE:我从本地机器执行了这个脚本,它调用了远程python脚本并传递了两个参数。当我运行此脚本时,我收到Permission denied (publickey,gssapi-keyex,gssapi-with-mic,password)错误:

host = [host-ip] #host_ip in string format
args1 = 'str1'
args2 = 'str2'

cmd_txt = "sudo ssh -i pem-file user@" + host + " 'cd folder1/folder2/ && python file1.py "+ args1 +" "+ args2 +"'"
system(cmd_txt)

我上面的代码中缺少什么?

1 个答案:

答案 0 :(得分:0)

先决条件:SSH和密钥同步(客户端的公钥应该在服务器的authorized_keys文件中)。

我看到你的本地命令以sudo开头。然而,.pem文件将提供对服务器的相同访问权限,无论您是从本地系统上的根帐户还是标准帐户进行连接(如果您不使用.pem文件但默认情况不同{。 {1}})。我建议确保普通的本地用户可以进行传出的ssh连接并删除${HOME}/.ssh/id_rsa

看一下Fabric包(pip install fabric)。它真的撼动你想要实现的目标。最大的优点是Fabric提供了对os或subprocess语句的良好抽象,并允许您从客户端脚本中运行服务器端命令,即

sudo