【问题标题】:Running a .bat file using subprocess module and passing it input使用 subprocess 模块运行 .bat 文件并将其传递给输入
【发布时间】:2021-02-01 13:20:20
【问题描述】:

关于在 python 中使用 subprocess 模块运行批处理文件的快速问题。

背景

我正在从 python 运行 .bat 文件,而 .bat 100% 运行 Windows 应用程序(大约需要一分钟),然后等待来自 stdio 的输入(x Esc) 关闭它。

我正在做的是:

subprocess.call([r'C:\Users\caSaira\Desktop\myExample.bat'], shell=True)

由于我不确定如何给出 xEsc,我没有做任何事情(假设这将处于等待输入阶段)。 但是,看起来windows应用程序在无限循环中运行。

问题

  1. 有谁知道我如何在我完成执行后传递'x' 信?
  2. 有谁知道为什么应用程序进入无限循环而不是等待阶段?

【问题讨论】:

  • 等待输入的是什么,批处理文件中的代码或它运行的 Windows 应用程序?您是否有某种原因通过批处理文件而不是直接运行后者(尽管subprocess)?
  • @martineau Windows 应用程序完成处理后,等待用户输入关闭应用程序(请输入 x 或 ESC 关闭)
  • @martineau 没有具体原因...命令提示符无法找到我正在运行的应用程序,因为它是自定义 .exe 文件/.. 我想,我会 cd 到exe 位置,然后运行应用程序...所以我的批处理文件只有两行代码 .. 1)将目录更改为 .exe 位置 2)使用一些命令行参数运行 Windows 应用程序
  • 如果你指定了.exe的完整路径——在批处理文件中或者在直接使用subprocess执行它时——如果它存在就会被找到。如果需要,您还可以指定参数以通过 subprocess 传递它,以及使用 stdin 和/或 stdout 的 i/o 重定向。
  • 我明白 .. 但 'x' 或 ESC 不是输入 cmd 行参数 .. 这些是关键输入,需要在过程完成后输入。

标签: python windows batch-file subprocess


【解决方案1】:

我终于想通了..我必须使用Popen并使用通信功能。

cmd1 = [r'myFile.bat']
p = SP.Popen(cmd1,stdin=SP.PIPE,stdout=SP.PIPE)
output = p.communicate(input='x'.encode())[0]
print(output.decode('ascii'))

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2015-01-06
    • 2020-08-15
    • 2013-04-19
    • 2021-12-10
    • 1970-01-01
    • 2022-01-08
    • 1970-01-01
    • 2018-09-26
    相关资源
    最近更新 更多