簡體   English   中英

使用子過程在stdin中讀取多行

[英]Reading Multiple lines in stdin using subprocess

我正在嘗試從python運行c ++程序。 我的問題是每次我跑步時:

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()

假設您要逐行讀取文件,並且僅將當前行傳遞給程序,則讀取文件中所有行的最佳方法是

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

someFile.readlines()讀取並返回someFile中所有行的列表。 但是,您需要將其傳遞給sampleprog.exe。 我將使用Popen.communicate()。 可能這是一個巨大的矯kill過正,但隨后您的循環看起來像

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

另外,您應該打開saveFile進行寫入(“ w'rite”或“ a” ppend選項)

您正在傳遞給Popen一個打開的文件,以stdout的形式讀取。 我認為輸出應該這樣構造:

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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM