我使用织物上的远程窗口运行一些指令7系统执行远程命令。而像我做了什么:织物不能在窗口
env.hosts=['192.168.91.235']
env.user='test'
env.password='123456'
def test_windows():
run("ifconfig",shell=False)
pass
和它的作品为“IPCONFIG”和输出远程系统的网络INFORS,所以我敢肯定,SSH连接正常。但它不适用于我尝试的任何其他命令,如“cd”,“echo hello”。错误是:
out:无法在远程系统上执行命令或shell:无法执行进程。
而我想远程运行一个Windows shell脚本,所以我应该怎么做?
P.S.如果我通过putty连接窗口,命令“cd”“echo hello”有效。
[更新]
我认识到,织物采用env.shell解释我过去了,现在我的问题是下面的命令:可以被指定一个Windows外壳面料env.shell?如何?
[再次更新]
我被分配 “的cmd.exe”,以env.shell,它被卡在执行 “cmd.exe的”。经过几次尝试env.shell="cmd.exe /c"
最终奏效。现在我可以通过织物远程执行dir
,echo
。
[更新后,它终于解决:]
我不知道如果我的解决方案是有缺陷的,它远远至今。
我的解决办法是使用在windows MSYS在Linux + freesshd +织物上的窗口作为sshserver。的窗口上
MSYS提供了“打击”,安德鲁沃克如下所述,织物预计“打击”并在其上良好地执行。尽管在上面的[更新]中,结构也可以与cmd.exe /c
一起生活,并在其上执行windows命令。
要分配MSYS的bash /壳织物,用户应该告诉ENV具体如何找到的bash
env.shell='cmd.exe /c c:/msys/1.0/bin/sh.exe -l -c'
cmd.exe /c
告诉织物下面的字符串应的cmd.exe被执行为“命令”,/c
cmd.exe
在windows cmd contenxt中表示一个命令,就像cmd.exe /c "command"
然后c:/msys/1.0/bin/sh -l -c
由cmd.exe执行并且fabric执行msys shell。我不知道什么呢-l
做什么,MSYS壳找不到bin文件夹fakelinuxcommand.exe没有-l
,所以我做了这样的结论-l
有助于环境。 -c
与/c
在cmd.exe /c
,表示下面的字符串作为c:/msys/1.0/bin/sh
命令相似,所以传递给SSH客户端的以下东西被作为一个命令在MSYS壳执行。
的整合为例,可以更清晰:
env.password='123456'
env.user='test'
env.hosts=['[email protected]']
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参数command
将env.shell进行串联和MSYS执行壳。
[我的结论
我不认为布离不开伪终端“喜欢bash的”工作。在[再次更新]中,linux中的fabric可以在远程Windows的cmd.exe中执行命令。在只有远程winodws存在的情况下,这就够了。 msys提供了一个linux bash,允许我在本地linux上在远程窗口和远程linux上执行相同的shell脚本。
我真的很感激你的答案虽然cygwin的不符合我们的需要。我已经更新了在问题描述中获取cmd.exe的方法。非常感谢。 –
感谢您的支持。 –