Ich versuche, ein Python-Skript zu schreiben, die 1) kompiliert eine cpp-Datei. 2) Liest eine Textdatei "Input.txt", die in die cpp-Datei eingegeben werden muss. 3) Vergleichen Sie die Ausgabe mit der Datei "Output.txt" und Drucken Sie "Pass", wenn alle Testfälle erfolgreich bestanden haben, sonst drucken Sie "Fail". `Übergabe von Stdin für cpp-Programm mit einem Python-Skript
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)
`
Für den obigen Code, ich bin eine Ausgabe wie diese bekommen,
(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 Code enthält die Nummer von der "zu erhöhen Input.txt "von 2.
Hey, Vielen Dank! Es funktionierte. Gibt es einen besonderen Grund dafür, die Datei als Binärdatei anstatt als direkte Zeichenkette zu öffnen, abgesehen von der Tatsache, dass python3 das so will? – Gautam
wie in der Antwort erklärt, nein (und das ist frustrierend, weil wir hier nur mit Text umgehen). Erwägen Sie, die Antwort als akzeptiert zu markieren, wenn dies für Sie funktioniert. –