使用Python3.4,我希望以准交互式的方式使用Popen

使用Python3.4,我希望以准交互式的方式使用Popen,python,windows,popen,Python,Windows,Popen,我在谷歌上做了很多搜索,甚至查看了stackoverflow,并尝试了一些我在这里找到的东西,但到目前为止没有任何效果。 我想收集我正在运行的windows系统的所有磁盘和分区信息。像这样的 from subprocess import Popen, PIPE, STDOUT p = None def ReadToEndOfStdOut(): global p if p: <WHAT GOES HERE> p = Popen(['diskpart

我在谷歌上做了很多搜索,甚至查看了stackoverflow,并尝试了一些我在这里找到的东西,但到目前为止没有任何效果。 我想收集我正在运行的windows系统的所有磁盘和分区信息。像这样的

from subprocess import Popen, PIPE, STDOUT

p = None

def ReadToEndOfStdOut():
    global p
    if p:
        <WHAT GOES HERE>

p = Popen(['diskpart'], stdout=PIPE, stdin=PIPE, stderr=STDOUT)
lines = ReadToEndOfStdOut()
p.stdin.write('list disk\n')
lines = ReadToEndOfStdOut()
disks = <# of disks listed in lines>
for disk in range(disks):
    p.stdin.write('select disk {0}\n'.format(disk))
    lines = ReadToEndOfStdOut()
    p.stdin.write('detail disk\n')
    lines = ReadToEndOfStdOut()
    <parse disk information from lines>
    p.stdin.write('list partition\n')
    lines = ReadToEndOfStdOut()
    partitions = <# of partitions listed in lines>
    for partition in range(partitions)
        p.stdin.write('select partition {0}\n'.format(partiton))
        lines = ReadToEndOfStdOut()
        p.stdin.write('detail partition\n')
        lines = ReadToEndOfStdOut()
        <parse partition information from lines>
p.stdin.write('exit')
lines = ReadToEndOfStdOut()
从子流程导入Popen、PIPE、STDOUT
p=无
def ReadToEndOfStdOut():
全局p
如果p:
p=Popen(['diskpart'],stdout=PIPE,stdin=PIPE,stderr=stdout)
lines=readToEndofstOut()
p、 stdin.write('list disk\n')
lines=readToEndofstOut()
磁盘=
对于范围内的磁盘(磁盘):
p、 写入('选择磁盘{0}\n'。格式化(磁盘))
lines=readToEndofstOut()
p、 stdin.write('detail disk\n')
lines=readToEndofstOut()
p、 stdin.write('列表分区\n')
lines=readToEndofstOut()
分区=
用于范围内的分区(分区)
p、 write('select partition{0}\n'.format(partition))
lines=readToEndofstOut()
p、 stdin.write('详细分区\n')
lines=readToEndofstOut()
p、 标准写入('退出')
lines=readToEndofstOut()

任何帮助都将不胜感激。

你应该去那里做什么?你怎么知道什么时候应该停止阅读?如果您想在发送下一个请求之前读取整个响应,那么您需要一个协议,该协议告诉您响应何时结束(例如,“响应始终是单行”或标题中指示大小或在末尾打印提示等),这正是我面临的问题。如果使用p.stdout.readline(),则在当前可用输出全部读取后,它会阻止等待更多输出。但是,我无法确定是否存在更多输出,因此我不知道何时停止阅读。应该怎么做?如何知道何时停止阅读?如果您想在发送下一个请求之前读取整个响应,那么您需要一个协议,该协议告诉您响应何时结束(例如,“响应始终是单行”或标题中指示大小或在末尾打印提示等),这正是我面临的问题。如果使用p.stdout.readline(),则在当前可用输出全部读取后,它会阻止等待更多输出。然而,我无法确定是否存在更多输出,因此我不知道何时停止读取。