Python subprocess、Popen和stdin:寻求有关自动将用户输入到.exe的实用建议
尽管我开始学习Python技能,但我有一个脚本,可以从2000行CSV文件中提取一行数据,读取关键参数,输出一个按N×2矩形组织的缓冲区CSV文件,并使用子流程模块调用外部程序POVCALLC.EXE,该程序将以这种方式组织的CSV文件作为输入。代码的相关部分如下所示。我认为子流程或它的一个方法应该允许我与外部程序交互,但不太确定如何交互,或者这是否是我需要的模块 特别是,当POVCALLC.EXE启动时,它首先请求输入文件,在本例中为buffer.csv。然后,它要求提供几个额外的参数,包括输出文件的名称,这些参数来自下面的代码段之外。然后,它开始计算结果,然后请求进一步的用户输入,包括几个回车。显然,我更愿意为原始CSV中的2000行自动执行此交互 我是否在正确的子流程轨道上,还是应该寻找其他地方来自动化与外部可执行文件的交互 非常感谢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。然后,它要求提供几个额外的参数,包括输
# 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,但它似乎很有用。嗯,我也学到了一些东西:)