有没有可能在远程机器上运行python脚本而不使用SCP或更好的方法传输文件?我搜索了很多库来解决这个问题。但没有找到最佳解决方案。
我找到了一些使用python脚本执行SSH和SCP到远程机器的库。在他们的方法中,首先使用SCP将文件复制到远程系统并通过SSH执行命令。
感谢您
你可以使用fabric。
显然它确实取决于你希望你的远程python脚本到底做什么,但它有很多帮助函数与操作系统交互,包括文件上传和下载,但它都是用Python编写的。
您可以使用标志调用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解释器可用的模块。
当然。
ssh remotehost python -c "'print(5)'"
不需要复制脚本来执行它。 Python解释器可以运行一个作为参数给出的脚本。
双引号是必要的(并且很快就会变成麻烦),因为ssh
调用会删除一个引用级别,而另一个引用仍然需要将脚本分组为python
调用的一个参数。
多线也没问题:
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")"