使用子进程从标准输入读取多行

0 投票
2 回答
1498 浏览
提问于 2025-04-17 16:28

我想从Python运行一个C++程序。我的问题是,每次我运行:

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

它只读取文件中的第一行。每次我用一个循环把它包起来时,程序就会因为无限循环而崩溃。有没有其他方法可以读取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

你把一个打开用于读取的文件传给了Popen作为标准输出。我觉得输出应该这样构建:

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

如果你想逐行读取文件里的内容,并把每一行传给程序,最好的方法是这样的:

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

someFile.readlines() 这个方法会读取文件中的所有行,并把它们放到一个列表里。不过,你需要把这些行传给 sampleprog.exe。我会用 Popen.communicate() 来实现这个功能。可能这个方法有点复杂,但你的循环会像这样:

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

另外,你还需要以写入模式打开 saveFile(可以选择 'w' 表示写入或 'a' 表示追加)

撰写回答