如何通过Python脚本使用不同的输入运行多次相同的程序?

时间:2014-03-05 17:24:34

标签: python lines

我需要多次运行一个简单的C程序,每个程序都有不同的输入字符串(让我们说AAAAA ...增加大小,直到我得到“TRUE”作为输出)。 e.g。

./program A # output FALSE
./program AA # output FALSE
./program AAA # output FALSE
./program AAAA # output FALSE
./program AAAAA # output FALSE
./program AAAAAA # output FALSE
./program AAAAAAA  # output TRUE
在C中

我只需使用 while 循环。 我知道在python中还有 while 循环。

所以python程序将是:

strlen = 0
while TRUE
 strlen++
 <run ./**C program** "A"*strlen > 
 if (<program_output> = TRUE)
   break

鉴于我可以通过编写

使.py脚本可执行
#! /usr/bin/env python

 chmod +x file.py

我该怎么做才能使这项工作?

提前致谢

4 个答案:

答案 0 :(得分:4)

您可以使用subprocess.check_output

import subprocess
strlen = 0
while True:
    strlen += 1
    if subprocess.check_output(['./program', 'A'*strlen]) == 'TRUE':
        break

答案 1 :(得分:2)

你可以尝试这样的事情(见docs):

import subprocess

args = ""
while True:
     args += "A"
     result = subprocess.call(["./program", "{args}".format(args=args)])
     if result == 'TRUE':
         break

subprocess模块优先于os.popen命令,因为它自“2.6版本以来已被弃用”。请参阅os documentation

答案 2 :(得分:1)

<强> file.py

import os

count=10
input="A"
for i in range(0, count):
    input_args=input_args+input_args
    os.popen("./program "+input_args)

运行 file.py 会在增加A输入

的情况下执行 ./ program 10次

答案 3 :(得分:1)

使用commands。这是文档http://docs.python.org/2/library/commands.html

  1. commands.getstatusoutput返回C程序的stdout输出。所以,如果您的程序打印出来,请使用它。 (实际上,它为stdout返回一个元组(0,out)。)
  2. commands.getstatus从程序中返回布尔状态,您也可以使用它。
  3. 因此,假设您使用stdout捕获./program输出,整个修改过的程序看起来像

    import commands
    
    while TRUE:
      strlen += 1
      output = commands.getstatusoutput("./program " + "A"*strlen)
      outstatus = output[1]
      if output == "true":
         break
    

    我会尝试使用getstatus来查看是否可以读取program返回的值。

    修改:自2.6以来,我们不会注意到commands已被弃用。请使用其他回复中显示的subprocess