我正在研究一个有很多非常强大的计算机的网格系统.这些可以用来非常快速地执行python函数.我的用户有许多python函数需要很长时间才能在工作站上进行计算,理想情况下,他们希望能够在远程强大的服务器上调用某些函数,但是它似乎在本地运行.
Python有一个名为"apply"的旧函数 - 现在python支持扩展调用语法(例如**参数),这几乎没用,但是我需要实现一些有点像这样的东西:
rapply = Rapply( server_hostname ) # Set up a connection
result = rapply( fn, args, kwargs ) # Remotely call the function
assert result == fn( *args, **kwargs ) #Just as a test, verify that it has the expected value. 
Rapply应该是一个类,可以用来远程执行fn远程服务器上的一些任意代码(可能是任何字面上的东西).它将发回rapply函数将返回的结果."结果"应该具有相同的值,就像我在本地调用函数一样.
现在让我们假设这fn是一个用户提供的函数,我需要某种方式通过线路将它发送到执行服务器.如果我能保证fn总是很简单,它可能只是一个包含python源代码的字符串......但是如果它不那么简单呢?
如果fn可能有本地依赖项:它可能是一个简单的函数,它使用在不同模块中定义的类,是否有一种封装方式fn以及fn需要哪些不是标准库?理想的解决方案不需要该系统的用户对python开发有太多了解.他们只是想写他们的功能并调用它.
为了澄清,我对讨论可能使用哪种网络协议来实现客户端和服务器之间的通信感兴趣.我的问题是如何将函数及其依赖项封装为可以序列化和远程执行的单个对象.
我也对在远程服务器上运行任意代码的安全性问题不感兴趣 - 我们只是说这个系统纯粹是为了研究而且是在一个严重防火墙的环境中.
如何在远程服务器上运行python(本地)运行php脚本?
我不想用python脚本或任何东西处理它的输出,只需执行它,同时退出python(而php脚本将已经工作并完成它的工作).
编辑:我想要实现的目标:
(我不打算在python中使用php输出做任何事情 - python只需上传php脚本并让它开始工作)
希望我现在更清楚了.对不起,如果我的问题不够具体.
另一个编辑:另请注意我在远程服务器上没有shell访问权限.我只有ftp和控制面板(cpanel); 试图使用ftp.
我正在使用远程机器。每次我需要验证文件更新时间时,我都必须使用 ssh,并且有多个脚本可以通过 ssh 连接到远程计算机。我在网上查了一下,但找不到符合我要求的。
我试图找到一个使用 ssh 的 python 脚本,并且密码也在脚本中,因为我的 python 脚本将每 5 分钟检查一次文件修改时间,并且每次执行脚本时我无法输入密码。我尝试了来自 SO 和互联网的这些代码,但无法满足我的需求。 通过使用 python 中的脚本提供密码来建立 ssh 会话
另外我通过 ssh 简单地进入一台远程计算机。然后我尝试 ssh 但通过 python 脚本到另一台远程计算机 cox 这个 python 脚本还包含检查不同文件的修改时间的代码..意味着我已经 ssh 到一台远程计算机然后我想从那里运行一些 python 脚本来检查另一台远程计算机上文件的文件修改时间。有没有一种简单的方法可以在 python 脚本中使用密码来 ssh 远程计算机。。我会很感激。
相关问题本质上是在问同样的问题,但有些答案对我不起作用:
我想ssh到远程机器并运行一个命令.例如:
ssh <user>@<ipv6-link-local-addr>%eth0 sudo service fooService status
问题是我试图通过只有标准库(没有pexpect)的python脚本来做到这一点.我一直在尝试使用该subprocess模块使其工作,但communicate在请求密码时始终调用阻塞,即使我提供了密码作为参数communicate.例如:
proc = subprocess.Popen(
        [
            "ssh",
            "{testUser1}@{testHost1}%eth0".format(**locals()),
            "sudo service cassandra status"],
        shell=False,
        stdin=subprocess.PIPE)
a, b = proc.communicate(input=testPasswd1)
print "a:", a, "b:", b
print "return code: ", proc.returncode
我也尝试了上面的一些变体(例如,删除"input =",添加/删除subprocess.PIPE赋值stdout和sterr).但是,结果始终是相同的提示:
ubuntu@<ipv6-link-local-addr>%eth0's password:
我错过了什么吗?或者有没有其他方法可以使用python标准库实现这一目标?
我需要使用boto3编写一个python脚本,它执行以下操作,