gpt4 book ai didi

c++ - 使用 Python 脚本为 cpp 程序传递标准输入

转载 作者:塔克拉玛干 更新时间:2023-11-03 07:42:51 24 4
gpt4 key购买 nike

我正在尝试编写一个 python 脚本,它1)编译一个cpp文件。2) 读取必须输入到 cpp 文件的文本文件“Input.txt”。3) 将输出与“Output.txt”文件进行比较,如果所有测试用例都成功通过则打印“通过”,否则打印“失败”。`

 import subprocess
from subprocess import PIPE
from subprocess import Popen
subprocess.call(["g++", "eg.cpp"])
inputFile = open("input.txt",'r')
s = inputFile.readlines()
for i in s :
proc = Popen("./a.out", stdin=int(i), stdout=PIPE)
out = proc.communicate()
print(out)

`

对于上面的代码,我得到这样的输出,

(b'32769', None)
(b'32767', None)
(b'32768', None)
Traceback (most recent call last):
File "/home/zanark/PycharmProjects/TestCase/subprocessEg.py", line 23, in <module>
proc = Popen("./a.out", stdin=int(i), stdout=PIPE)
ValueError: invalid literal for int() with base 10: '\n'

PS :- eg.cpp 包含将“Input.txt”中的数字增加 2 的代码。

最佳答案

改为将字符串传递给 communicate,并以二进制形式打开文件(否则 python 3 不会喜欢它/您必须将字符串编码为 bytes ):

 with open("input.txt",'rb') as input_file:
for i in input_file:
print("Feeding {} to program".format(i.decode("ascii").strip())
proc = Popen("./a.out", stdin=PIPE, stdout=PIPE)
out,err = proc.communicate(input=i)
print(out)

也不要将文件的输入转换为整数。将其保留为字符串(不过我怀疑您必须过滤掉空行)

关于c++ - 使用 Python 脚本为 cpp 程序传递标准输入,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46092169/

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