使用子进程从标准输入读取多行
我想从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' 表示追加)