shell – fabric无法在Windows上执行远程命令
我正在使用fabric在远程
Windows 7系统上运行一些命令.我做的是:
env.hosts=['192.168.91.235'] env.user='test' env.password='123456' def test_windows(): run("ifconfig",shell=False) pass 它适用于“ipconfig”并输出远程系统的网络信息,所以我确定ssh连接正常.但它不适用于我试过的任何其他命令,如“cd”,“echo hello”.错误是:
我想远程运行Windows shell脚本,我该怎么办? 附:如果我通过putty连接窗口,命令“cd”“echo hello”有效. [更新] 我意识到Fabric正在使用env.shell来解释我传递的命令,现在我的问题是:可以指定一个windows shell来构造env.shell吗?如何? [再次更新] 我正在为env.shell分配“cmd.exe”,并且它在执行“cmd.exe”时被卡住了.经过几次尝试后,env.shell =“cmd.exe / c”最终会起作用.现在我可以执行dir,通过结构远程回显. [最终解决后更新:] 我不确定我的解决方案是否有缺陷,直到现在还顺利. 我的解决方案是在Windows上的linux freesshd上使用msys作为sshserver. windows上的msys提供了一个“bash”,正如Andrew Walker在下面提到的那样,fabric期望“bash”并且在它上面表现出色.虽然在上面的[update again]中,fabric也可以使用cmd.exe / c并在其上执行windows命令. 要将msys bash / shell分配给fabric,用户应该具体告诉env如何查找bash env.shell='cmd.exe /c c:/msys/1.0/bin/sh.exe -l -c' cmd.exe / c告诉fabric下面的字符串应该作为cmd.exe中的“命令”执行,/ c后cmd.exe表示windows cmd contenxt中的命令,就像cmd.exe / c“command” 然后c:/msys/1.0/bin/sh -l -c由cmd.exe执行,并且结构正在执行msys shell.我不确定-l做什么,msys shell在没有-l的bin文件夹中找不到fakelinuxcommand.exe,所以我得出结论-l有助于环境. -c与cmd.exe / c中的/ c类似,表示以下字符串作为c:/msys/1.0/bin/sh的命令,因此传递给ssh客户端的以下内容在msys shell中作为命令执行. 一个集成示例,以明确: env.password='123456' env.user='test' env.hosts=['test@192.168.91.238'] env.shell='cmd.exe /c c:/msys/1.0/bin/sh.exe -l -c' def run_shell_command(command): return run(command,pty=False) 函数run_shell_command中的参数命令将与env.shell连接并由msys shell执行. [我的结论] 如果没有’bash like’伪终端,我不认为面料不能工作.在[再次更新]中,linux中的结构可以在远程窗口的cmd.exe中执行命令.在某些只存在远程winodws的情况下,这就足够了. msys提供了一个linux bash,允许我在远程窗口和远程linux上从本地linux执行相同的shell脚本. 解决方法
Fabric真的希望远程机器上有一个bash(或至少类似bash)的shell.
使结构在远程Windows机器上运行命令的最简单方法是安装适当的shell.例如,默认情况下,安装cygwin包含此类shell. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |