gpt4 book ai didi

执行外部程序后可以发送多个输入的Python脚本

转载 作者:可可西里 更新时间:2023-11-01 10:21:07 33 4
gpt4 key购买 nike

我正在寻找使用 Python 为 Windows 创建一个 diskpart 脚本。

我需要运行 diskpart,然后在程序执行后发出额外的命令,下面是一系列输入。我最终会把它放在一个循环中,这样它就可以对一系列磁盘完成。

  • 选择磁盘 1
  • 属性磁盘清除只读
  • 在线磁盘 noerr
  • 干净
  • 创建零件 PRI
  • 选择第 1 部分
  • 分配
  • FORMAT FS=NTFS QUICK LABEL="新卷"

我已尝试按以下方式执行此操作。

在下面的示例中,我能够执行 diskpart,然后运行第一个命令“select disk 1”,然后它终止。我希望能够发送额外的命令来完成准备磁盘的过程,该怎么做? diskpart 除了从文件中读取外,不接受可以促进此操作的参数,但我想避免在 Windows 2012 PowerShell cmdelts 上使此操作更容易实现。

import subprocess

from subprocess import Popen, PIPE, STDOUT
p = Popen(['diskpart'], stdout=PIPE, stdin=PIPE, stderr=STDOUT)
grep_stdout = p.communicate(input=b'select disk 1')[0]
print(grep_stdout.decode())

寻找类似

的东西
from subprocess import Popen, PIPE, STDOUT
p = Popen(['diskpart'], stdout=PIPE, stdin=PIPE, stderr=STDOUT)
grep_stdout = p.communicate(input=b'select disk 1')[0]

- run command
- run command
- run command
- run command
- run command
- run command
- run command

print(grep_stdout.decode())

我在下面尝试了以下操作,实际上执行了 diskpart,然后还运行了命令“select disk 1”,然后退出,我相信这不是发送输入的正确方式,但更符合我正在尝试的方式实现我是否可以继续发送后续命令。

import subprocess
from subprocess import Popen, PIPE, STDOUT
p = Popen(['diskpart'], stdout=PIPE, stdin=PIPE, stderr=STDOUT)
grep_stdout = p.communicate(input=b'select disk 1')[0]

最佳答案

我认为您在这里遇到了 communicate 的问题 - 它将数据发送到进程,然后等待它完成。 (参见 Communicate multiple times with a process without breaking the pipe?)

我不确定这是否会有帮助,但我根据链接的答案编写了一个批处理脚本。

测试.bat:

@echo off

set /p animal= "What is your favourite animal? "
echo %animal%

set /p otheranimal= "What is another awesome animal? "
echo %otheranimal%

set "animal="
set "otheranimal="

测试.py:

import time
from subprocess import Popen, PIPE

p = Popen(["test.bat"], stdin=PIPE)

print("sending data to STDIN")
res1 = p.stdin.write("cow\n")
time.sleep(.5)
res2 = p.stdin.write("velociraptor\n")

这通过将数据发送到标准输入来工作,而不是等待过程完成。

我不是 Windows 专家,所以如果 diskpart 中的输入处理与批处理文件的标准输入不同,我深表歉意。

关于执行外部程序后可以发送多个输入的Python脚本,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28974921/

33 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com