簡體   English   中英

如何通過Python腳本使用不同的輸入運行多次相同的程序?

[英]How to run several times the same program with different inputs via Python script?

我需要多次運行一個簡單的C程序,每個程序都有不同的輸入字符串(讓我們說AAAAA ...增加大小,直到我得到“TRUE”作為輸出)。 例如

./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

在CI中只需使用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

我應該怎么做才能使這項工作?

提前致謝

您可以使用subprocess.check_output

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

你可以試試這樣的東西(見文檔 ):

import subprocess

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

subprocess os.popen模塊比os.popen命令更os.popen ,因為它自“2.6版本以來已被棄用”。 請參閱os文檔

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次

使用commands 這是文檔http://docs.python.org/2/library/commands.html

  1. commands.getstatusoutput返回C程序的stdout輸出。 所以,如果您的程序打印出來,請使用它。 (實際上,它為stdout返回一個元組(0,out))。
  2. commands.getstatus從程序中返回布爾狀態,您也可以使用它。

因此,假設您使用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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM