2012-11-29 103 views
2

這次我詢問遠程Windows計算機上的運行命令。 讓我在這裏更具描述性。
**我有一臺機器上安裝了python,我想運行一些powershell和cmd命令,或者我想發送一個cmd文件到遠程windows機器,以便它可以在那裏運行,並且每個輸出都像錯誤,stdout I可以回到燒機。
就像我想從Python遠程管理遠程機器。如果可能的話,我可以在多臺機器上用python同時遠程啓動命令。
請記住,其他系統沒有安裝任何python。 **使用python運行遠程Windows機器上的命令

回答

0

您可以嘗試使用類似Pyro4subprocess.popen的組合。

Pyro4爲遠程方法調用的框架,subprocess.popen用於創建底層操作系統進程。

+0

thanx的快速回復,但據我所知pyro4是所有ABT遠程調用的python對象,但我的情況是,Python是一個系統上運行和其他系統是不是有python安裝。 – skyemperor

2

您可以在Windows機器上安裝ssh服務器(我聽說freeSSHd很好),然後使用paramiko模塊與它通信。

+0

這是我的理解,Windows 10(本月晚些時候發佈)將全面支持SSH開箱即用。因此,如果您只能使用Windows 10或更新版本,則可能不需要在其上安裝SSH服務器。 (我實際上沒有任何運行Windows 10 beta的機器,所以我還沒有能夠測試這個。) – ArtOfWarfare

+0

微軟提供的OpenSSH相當麻煩。最好避免。 @ArtOfWarfare從他們的github頁面看來,似乎很多人都有類似的問題。不知道它是否會起作用,但最好的機會是從這裏使用一個建議的sshd服務器:https://serverfault.com/questions/8411/what-is-a-good-ssh-server-to-use -on-windows –

+0

@ArtOfWarfare,我還必須在遠程Windows機器上執行python腳本。你是如何解決這個問題的? –

1

您可以使用ssh此爲khagler建議。但我更喜歡在兩邊都安裝Python,因爲Python使我在遠程端有了更多的控制權。

例如,ssh只是提供兩個計算機之間的單個信道。這意味着我必須在遠程端摺疊stdoutstderr以通過電線發送。使用遠程Python服務器,我可以運行更復雜的腳本,我可以準確控制我想要公開的內容(如果允許遠程訪問任何命令都可以執行),並且錯誤處理更簡單。

或兩者的組合:在遠程計算機上安裝Python,然後用ssh啓動Python腳本。然後,您可以使用自定義協議與其進行通信,而不受命令行/ shell界面的限制。您甚至可以使用scp遠程安裝新腳本。

+0

我想知道你在Windows上運行的是什麼sshserver?實際上,我嘗試着使用兩種不同的SSH服務器來做同樣的事情:微軟提供的'mobasshd'和'openSSH'。對於這兩個服務器,即使通過手動ssh登錄,我也無法執行python腳本。我發佈在'serverfault':https://serverfault.com/questions/901041/how-to-run-a-python-script-remotely-via-ssh-on-a-windows-machine –

+0

想知道你是否可以提供你正在使用的庫的具體細節? –

3

這是一個有點雷區,但「正確」的方式做到這一點(蟒蛇控制遠程勝機無蟒蛇)是使用WMI或水資源管理庫。

有一個WMI module by Tim Golden(誰是Windows-on-Windows世界的權威),WSMAN library from Dellpywinrm module。選擇你的毒藥 - 它們都有自己的弱點(WRM必須在使用之前在服務器上啓用,儘管這不需要任何額外的軟件,它是全部的Windows; WMI在DCOM上工作,所以你會必須弄清楚DCOM安全等等)。

+0

這聽起來像是最好的解決方案。我可以使用這些模塊來控制非Windows的Windows服務器,還是依賴只能在Windows上使用的基礎機制? – ArtOfWarfare

+0

Tim的WMI模塊只是pywin32的一個包裝,所以不行,你不能在非windows上使用它。我不知道戴爾的一個(現在看起來被遺棄,順便說一句)。 WRM本身就是一個基於XML的協議(我認爲),所以理論上你可以做很多事情,但實際上它是那些沒人想要弄髒的「企業」標準之一。如果你真的想要的話,你可以試着查看流量並重新實現你所需要的功能。 –

+0

WMI是一個禁止使用,僅限於Windows。 WSMAN文檔提到它支持Linux ...也許我可以讓它在OS X上工作。它支持2.6和更新,並且在2年前更新,所以它在很久以前並沒有被放棄。你的'pywinrm模塊'鏈接指向與'來自Dell的WSMAN庫'完全相同的地方 - 我認爲這是一個錯誤。我在這裏找到了'pywinrm':https://pypi.python.org/pypi/pywinrm/0.0.3。它看起來不錯...如果它允許我上傳和下載文件,它是完美的。 – ArtOfWarfare

1

知道這是一個很老的帖子,

我能想到的是現在是使用PowerShell的窗口遠程管理的最佳選擇。

下面是如何使用PowerShell和如何在Python中執行相同的執行在遠程計算機的命令。

PowerShell來啓動服務:

Get-Service -ComputerName aaa0001 -Name Tomcat9 | Start-Service 

現在,接下來就是如何使用Python執行此,

import subprocess 

subprocess.call(["C:\\Windows\\System32\\WindowsPowerShell\\v1.0\\powershell.exe","Get-Service -ComputerName aaa0001 -Name Tomcat9 | Start-Service"]) 

這個例子顯示瞭如何在Windows啓動Tomcat9窗口服務。 (「aaa0001」就是計算機名稱)

相關問題