Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/364.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 使用子流程模块运行.bat文件并将其输入_Python_Windows_Batch File_Subprocess - Fatal编程技术网

Python 使用子流程模块运行.bat文件并将其输入

Python 使用子流程模块运行.bat文件并将其输入,python,windows,batch-file,subprocess,Python,Windows,Batch File,Subprocess,关于在python中使用子流程模块运行批处理文件的快速问题 背景 我正在从python运行一个.bat文件,.bat运行一个windows应用程序100%(大约需要一分钟),然后等待来自stdio(x或Esc)的输入来关闭它 我正在做的是: subprocess.call([r'C:\Users\caSaira\Desktop\myExample.bat'], shell=True) 因为我不确定如何给出x或Esc,所以我什么也没做(假设这将处于等待输入的阶段)。 但是,看起来windows应

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

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

我正在做的是:

subprocess.call([r'C:\Users\caSaira\Desktop\myExample.bat'], shell=True)
因为我不确定如何给出x或Esc,所以我什么也没做(假设这将处于等待输入的阶段)。 但是,看起来windows应用程序在无限循环中运行

问题
  • 有人知道我完成执行后如何传递字母吗
  • 有人知道为什么应用程序处于无限循环而不是等待阶段吗

  • 我终于明白了。。我必须使用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'))
    

    我终于明白了。。我必须使用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'))
    

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