使用python执行CMD命令

时间:2016-12-05 16:36:29

标签: python python-3.x cmd pexpect winpexpect

我要做的是创建服务器和客户端,服务器能够执行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,我知道我可以通过提高超时来解决这个问题,但这并没有改变我的阅读方法存在缺陷的事实。

任何人都可以帮我阅读命令提示符的输出吗?

如果我没有描述我已经足够好的问题,我很抱歉,这是我第一次在stackoverflow上寻求帮助:) ...

1 个答案:

答案 0 :(得分: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"