我使用織物上的遠程窗口運行一些指令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的方法。非常感謝。 –
感謝您的支持。 –