读取使用子进程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() 
+0

只是检查,你想在文件中sampleprog.exe多次调用,每行bascialy一次,或者你想与所有的行调用一次该文件作为输入? – schacki 2013-02-20 11:02:23

+0

我想每行调用一次实际数次,因为我认为只要将文件中的所有行作为输入调用一次,程序就取决于用户会传递什么内容。 – lol 2013-02-20 14:08:34

的最佳方式读取文件中的所有行,假设你要读它一行行,只有当前行传递给程序

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选项)

+0

ahhh是的,我看到它肯定是一个巨大的杀戮但无论如何,它的工作..我没有考虑沟通作为一种解决方案,因为我专注于execfile(),因为非ASCII字符实际上不工作,但现在我回到轨道,我会试图为此创建一个沙箱..再次感谢 – lol 2013-02-20 14:16:13

要传递到POPEN一个文件作为标准输出打开。我想输出应该构建这样的:

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

好吧,TNX,我会看看它 – lol 2013-02-20 14:16:45