Python subprocess、Popen和stdin:寻求有关自动将用户输入到.exe的实用建议

Python subprocess、Popen和stdin:寻求有关自动将用户输入到.exe的实用建议,python,csv,user-input,Python,Csv,User Input,尽管我开始学习Python技能,但我有一个脚本,可以从2000行CSV文件中提取一行数据,读取关键参数,输出一个按N×2矩形组织的缓冲区CSV文件,并使用子流程模块调用外部程序POVCALLC.EXE,该程序将以这种方式组织的CSV文件作为输入。代码的相关部分如下所示。我认为子流程或它的一个方法应该允许我与外部程序交互,但不太确定如何交互,或者这是否是我需要的模块 特别是,当POVCALLC.EXE启动时,它首先请求输入文件,在本例中为buffer.csv。然后,它要求提供几个额外的参数,包括输

尽管我开始学习Python技能,但我有一个脚本,可以从2000行CSV文件中提取一行数据,读取关键参数,输出一个按N×2矩形组织的缓冲区CSV文件,并使用子流程模块调用外部程序POVCALLC.EXE,该程序将以这种方式组织的CSV文件作为输入。代码的相关部分如下所示。我认为子流程或它的一个方法应该允许我与外部程序交互,但不太确定如何交互,或者这是否是我需要的模块

特别是,当POVCALLC.EXE启动时,它首先请求输入文件,在本例中为buffer.csv。然后,它要求提供几个额外的参数,包括输出文件的名称,这些参数来自下面的代码段之外。然后,它开始计算结果,然后请求进一步的用户输入,包括几个回车。显然,我更愿意为原始CSV中的2000行自动执行此交互

我是否在正确的子流程轨道上,还是应该寻找其他地方来自动化与外部可执行文件的交互

非常感谢

# Begin inner loop to fetch Lorenz curve data for each survey
    for i in range(int(L_points_number)):
        index = 3 * i
        line = []
        P = L_points[index]
        line.append(P)
        L = L_points[index + 1]
        line.append(L)
        with open('buffer.csv', 'a', newline='') as buffer:
            writer = csv.writer(buffer, delimiter=',')
            P=1
            line.append(P)
            L=1
            line.append(L)
            writer.writerow(line)
            subprocess.call('povcallc.exe')
            # TODO:   CALL povcallc and compute results
            # TODO:   USE Regex to interpret results and append them to 
            #           output file

如果您的程序希望在标准输入上使用这些参数(例如,在运行POVCALLC后,在控制台中键入csv文件名),则可以使用带有stdin重定向(stdin=PIPE)的
subprocess.Popen()
[请参见],并使用返回的对象将数据发送到stdin

看起来是这样的:

my_proc = subprocess.Popen('povcallc.exe', stdin=subprocess.PIPE)
my_proc.communicate(input="my_filename_which_is_expected_by_the_program.csv")

您还可以使用
communicate
返回的元组来自动检查程序stdout和stderr(更多信息,请参见文档链接)。

您可以检查POVCALLC是否有命令行界面吗?使用
子流程
可能无法满足您的需要,因为您需要的似乎是在终端中模拟用户条目。据我所知,
子流程
只知道标准的输入、输出和输出错误:-/Thank,Mailerdaimon——这意味着它可以从Windows命令提示符下运行吗?是的,谢谢,乔尔,有什么想法吗?我看过Pyatogui,但这似乎不是所需要的。太好了——谢谢——我会试试的。但对于剩下的交互,我可能已经在pexpect中找到了答案。我不知道pexpect,但它似乎很有用。嗯,我也学到了一些东西:)