2013-02-20 2 views
0

Я пытаюсь запустить C++-программу из python. Моя проблема заключается в том, что каждый раз я запускаю:Чтение Несколько строк в stdin с использованием подпроцесса

subprocess.Popen(['sampleprog.exe'], stdin = iterate, stdout = myFile) 

он только считывает первую строчку в файле. Каждый раз, когда я заключу его в цикл while, он заканчивается из-за бесконечного цикла. Есть ли другой способ прочитать все строки внутри testcases.txt?

Мой Пример кода ниже:

someFile = open("testcases.txt","r") 
saveFile = open("store.txt", "r+") 

try: 
    with someFile as iterate: 
     while iterate is not False: 
      subprocess.Popen(['sampleprog.exe'],stdin = iterate,stdout = saveFile) 

except EOFError: 
    someFile.close() 
    saveFile.close() 
    sys.exit() 
+0

Просто проверяю, вы хотите звонить sampleprog.exe несколько раз, bascialy один раз в каждой строке в файле, или вы хотите назвать это, как только все строки из файл как вход? – schacki

+0

Я хочу называть его несколько раз один раз в строке на самом деле, потому что я думаю, что называть его один раз со всеми строками из файла, поскольку входные данные зависят от того, что пользователь будет передавать? – lol

ответ

0

Самый лучший способ, чтобы прочитать все строки внутри файла, предполагая, что вы хотите прочитать его строка за строкой, и передавать только текущую строку программы

with open("testcases.txt","r") as someFile: 
    iterate = someFile.readlines() 
    for line in iterate: 
     #Code 

someFile.readlines() считывает и возвращает список всех строк в someFile. Однако вам нужно передать его в sampleprog.exe. Я бы использовал Popen.communicate(). Возможно, что это гигантское излишество, но тогда ваш цикл будет выглядеть

for line in iterate: 
    s = subprocess.Popen(['sampleprog.exe'], stdin = subprocess.PIPE, stdout = saveFile) 
    s.communicate(line) 

Кроме того, Вы должны открыть SAVEFILE для записи («w'rite или» варианта a'ppend)

+0

ahhh да, я вижу, что это гигантское убийство, но в любом случае это сработало. Я не рассматривал сообщение как решение, потому что я сосредоточился на execfile(), который на самом деле не работает из-за несимвольного символа, но теперь Я вернулся в трек, я бы попытался создать для этого песочницу. Еще раз спасибо – lol

0

Вы передаете к POPEN файл открыт для чтения в качестве stdout. Я думаю, что выход должен быть построен так:

saveFile = open("store.txt", "w") 
+0

Хорошо, tnx, я посмотрю на него – lol