读取使用子进程stdin中的多行
我想从python运行一个C++程序。我的问题是,我每次运行:读取使用子进程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()
的最佳方式读取文件中的所有行,假设你要读它一行行,只有当前行传递给程序
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选项)
ahhh是的,我看到它肯定是一个巨大的杀戮但无论如何,它的工作..我没有考虑沟通作为一种解决方案,因为我专注于execfile(),因为非ASCII字符实际上不工作,但现在我回到轨道,我会试图为此创建一个沙箱..再次感谢 – lol 2013-02-20 14:16:13
要传递到POPEN一个文件作为标准输出打开。我想输出应该构建这样的:
saveFile = open("store.txt", "w")
好吧,TNX,我会看看它 – lol 2013-02-20 14:16:45
只是检查,你想在文件中sampleprog.exe多次调用,每行bascialy一次,或者你想与所有的行调用一次该文件作为输入? – schacki 2013-02-20 11:02:23
我想每行调用一次实际数次,因为我认为只要将文件中的所有行作为输入调用一次,程序就取决于用户会传递什么内容。 – lol 2013-02-20 14:08:34