我正在尝试编写一个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的代码。
答案 0 :(得分:0)
将字符串传递给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)
也不要将文件的输入转换为整数。把它留作字符串(我怀疑你不得不过滤出空行)