我使用pysftp(它是paramiko的包装器)。在
import pysftp
cnopts = pysftp.CnOpts()
cnopts.hostkeys = None
sftp=pysftp.Connection(host='hostname',username="root",password="pass",cnopts=cnopts)
alex/u要在脚本中执行
^{pr2}$但它不起作用,因为找不到脚本。在
另一方面,它确实有效
sftp.execute("cd /home/alex_test;cat myscript.tcsh")
为什么? 我的目标是为unix和Windows创建一个通用代码。在
.execute
方法实际上与SFTP无关。它在内部打开一个单独的“exec”SSH通道。该信道与“SFTP”子系统信道完全隔离。在如果您直接使用Paramiko库,就更清楚了,因为在那里您可以清楚地看到Paramiko^{} method (pysftp} class 。在
.execute
)根本不使用Paramiko^{实际上,即使是^{} method 的文档也说:
而且SFTP协议本身并没有工作目录的概念。在
pysftp(或者实际上是底层Paramiko库)只在本地模拟这种情况。传递给pysftp/Paramiko library SFTP方法的所有相对路径在发送到SFTP服务器之前都会转换为绝对路径。对于pysftp来说,这意味着几乎所有的方法(可以使用远程路径),但有一个显著的例外是
.execute
。这种转换是可能的,因为SFTP协议要求使用*nix样式的路径(即使实际的远程服务器系统使用不同的语法)。所以pysftp/Paramiko知道如何将相对路径转换为绝对路径。在相反,传递给
.execute
方法的命令将使用服务器的专有语法在服务器上完全执行。当地图书馆不可能理解这一点,并以某种方式神奇地将其转化。在如果你输入sftp.执行('ls')您将获得用户名目录的内容。在
在该目录中创建一个名为示例.py并写下以下内容:
导入操作系统 os.chdir公司('/home/alex_test')
操作系统('来源myscript.tcsh')
现在运行:
sftp.执行(Python示例.py')
不是最好的解决办法,但它是有效的。在
相关问题 更多 >
编程相关推荐