在远程计算机中运行python脚本而不使用SCP

在远程计算机中运行python脚本而不使用SCP,python,ssh,scp,remote-server,Python,Ssh,Scp,Remote Server,有没有可能使用SCP或更好的方法在远程机器上运行python脚本而不输出传输文件?为了解决这个问题,我搜索了很多库。但是没有找到最好的解决办法 我发现了一些使用python脚本对远程机器执行SSH和SCP的库。在他们的方法中,首先使用SCP将文件复制到远程系统,然后通过SSH执行命令 谢谢你当然 ssh remotehost python -c "'print(5)'" 执行脚本时不需要复制脚本。Python解释器可以运行作为参数给出的脚本 双引号是必要的(并且很快会成为一个麻烦),因为ssh

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

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

谢谢你

当然

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")"
你可以用


显然,它确实取决于您希望远程python脚本执行的具体操作,但它有许多用于与操作系统交互的帮助函数,包括文件上载和下载,但都是用python编写的。

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

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解释器可用的模块。

感谢您的回答@Alfe,但我希望在python脚本中实现这一点,而不是使用shell命令。我希望执行一些函数或c同一个python脚本中的lasses不是一个完整的脚本。因为许多依赖项在远程系统(包)中可能不可用.你的问题还不清楚。那么我建议使用@justcompile的答案,并使用fabric。这是一个广为人知的用于此目的的库。Hi@justcompile它也类似于Paramiko库。所以我们需要将文件上传到远程系统,这样没有下载和上传文件的更好主意吗?我相信是这样的正如我所说,您可以通过fabric上传,但另一种选择是通过pip从包含依赖项的存储库中安装脚本(您可以通过fabric执行此操作)然后使用fabric或通过@alfiethattmethodusing
python-
所建议的命令标志调用它,因此如果python脚本想要从stdin读取,那就不可能了。但在许多情况下,这应该没有问题。如果是,请看我的答案。