在远程机器上运行python脚本而不使用SCP

时间:2018-01-03 16:59:19

标签: python ssh scp remote-server

有没有可能在远程机器上运行python脚本而不使用SCP或更好的方法传输文件?我搜索了很多库来解决这个问题。但没有找到最佳解决方案。

我找到了一些使用python脚本执行SSH和SCP到远程机器的库。在他们的方法中,首先使用SCP将文件复制到远程系统并通过SSH执行命令。

感谢你

3 个答案:

答案 0 :(得分:1)

您可以使用fabric

显然它确实取决于你想要远程python脚本到底做什么,但它有很多辅助功能可以与操作系统进行交互,包括文件上传和文件。下载但它是用Python编写的。

答案 1 :(得分:1)

您可以使用标志调用python从其标准输入读取脚本,然后通过ssh连接将脚本提供给python实例,例如:

cat /some/script.py | ssh user@host 'python -'

运行python -将使python解释器从进程的标准输入中读取脚本。在这种情况下,ssh进程的标准输入作为python实例的标准输入传递给远程系统。

如果需要,您可以为python脚本提供其他命令行参数:

cat /some/script.py | ssh user@host 'python - arg1 arg2...'

请注意,python脚本中的任何import语句都将在远程系统上解析,因此脚本必须将自己限制为远程python解释器可用的模块。

答案 2 :(得分:0)

不确定

ssh remotehost python -c "'print(5)'"

不需要复制脚本来执行它。 Python解释器可以运行一个作为参数给出的脚本。

双引号是必要的(并且很快会变成麻烦)因为ssh调用会删除一级引用,而另一个引用仍然需要将脚本分组为python调用的一个参数

Multiline也没问题:

ssh remotehost python -c "'             
import random
print(random.random())'"

将打印类似

的内容
0.998373816572

在Python脚本中使用'"时,请注意引用内容。

另一种选择是将脚本放在变量中,然后使用printf正确引用内容:

a='             
import random
print(random.random())'
# or use something like a=$(cat myscript.py)

ssh ttiqadm@ttiq-hv02 python -c "$(printf "%q" "$a")"