使用子进程读取stdin中的多行

时间:2013-02-20 09:59:05

标签: python subprocess stdin

我正在尝试从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()

2 个答案:

答案 0 :(得分: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 options)

答案 1 :(得分:0)

你正在向Popen传递一个打开阅读的文件作为标准输出。我认为输出应该像这样构造:

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