2016-12-05 518 views
0

我想要做的是創建一個服務器和一個客戶端,服務器能夠執行CMD命令。使用python執行CMD命令

我設法做服務器 - 客戶端通信,但我在使用python控制命令提示符時遇到問題。

我當前的代碼是:

import time 
import _thread 
import winpexpect 
class CommandPrompt(object): 
    def __init__(self): 
     self.cmd = winpexpect.winspawn('cmd.exe') 
    def read(self): 
     while True: 
      if self.cmd.readline(): 
       print(self.cmd.before) 
    def send(self,usinput): 
     self.cmd.sendline(usinput) 
    def close(self): 
     self.cmd.close() 
cmd = CommandPrompt() 
_thread.start_new_thread(cmd.read,()) 
time.sleep(1) 
while True: 
    cmd.send(input('>>')) 

有了這個代碼,我能夠執行shell命令,但它總是我錯過了最後一行時,一個顯示當前路徑,並等待我輸入ex:C:\Windows\system32>。我認爲它沒有顯示該線的原因是因爲沒有輸入。

此外,經過一段時間沒有輸入任何命令它崩潰pexpect.TIMEOUT,我知道我可以通過提高超時解決這個問題,但它並沒有改變我的閱讀方法有缺陷的事實。

任何人都可以幫我讀取命令提示符的輸出嗎?

對不起,如果我沒有描述的問題,我有足夠的好,這是我第一次尋求幫助這裏計算器:) ...

回答

0

您可以嘗試管道輸出到輸出文件並讀取該文件。例如:

import time 
import _thread 
import winpexpect 
class CommandPrompt(object): 
    def __init__(self): 
     self.cmd = winpexpect.winspawn('cmd.exe') 
    def read(self): 
     while True: 
      if self.cmd.readline(): 
       print(self.cmd.before) 
    def send(self,usinput): 
     self.cmd.sendline(usinput) 
    def close(self): 
     self.cmd.close() 
cmd = CommandPrompt() 
_thread.start_new_thread(cmd.read,()) 
time.sleep(1) 
while True: 
    cmd.send(input('>>') + " > out.txt") 

    # some sort of function to request the contents of "out.txt" 

    # some sort of function to remove "out.txt" 
+0

是的,但每次我在os.system中運行一個命令時,它都運行在不同的cmd實例中。我需要將所有命令運行在相同的cmd實例中,以便我可以執行諸如「cd foo」和「dir/d」之類的操作。感謝您的快速回復,雖然 –

+0

@PopescuIonutAlexandru不用擔心!我將相應地編輯帖子 –