Как передать строковую переменную из одной функции в другую? - PullRequest
4 голосов
/ 08 октября 2019

Если бы я хотел, скажем, выполнить test1 и передать результат в excel, а затем выполнить test2 и затем передать результат, как бы я это сделал? Теперь все тесты должны быть выполнены вместе. Это возможно?

import os
import xlswriter
from datetime import datetime
import time


def save_results():
    os.chdir(r'C:\Users\vrozakos\Documents\10P_Results')
    workbook = xlsxwriter.Workbook(datetime_output_results+'.xlsx')
    worksheet = workbook.add_worksheet()
    bold = workbook.add_format({'bold': True})
    worksheet.set_column('A:A', 20)
    worksheet.write('B1', test_1())
    worksheet.write('B2', test2())
    workbook.close()



def test1():
    output = str(ser.read(1000).decode())
    output = str(output)
    if "0x1" in output :
        print('Pass')
        return 'Pass'
    else:
        print('Fail')
        return 'Fail'


def test2():
    output2 = str(ser.read(1000).decode())
    print(output2)
    test2_output = str(output2)
    if "0x1" in test2_output:
        print('Pass')
        return 'Pass'
    else:
        print('Fail')
        return 'Fail'

Ответы [ 4 ]

3 голосов
/ 04 ноября 2019

Лучшее решение, кажется, это, вы должны следовать этому:

def save_results():
    os.chdir(r'C:\Users\user\Documents\Results')
    workbook = xlsxwriter.Workbook(datetime_output_results+'.xlsx')
    worksheet = workbook.add_worksheet()
    bold = workbook.add_format({'bold': True})
    worksheet.set_column('A:A', 20)
    worksheet.write('A1', test1())
    worksheet.write('B1', test2())
    workbook.close()
3 голосов
/ 31 октября 2019

Это действительно довольно просто, не так много нужно менять:

def save_results():
    os.chdir(r'C:\Users\user\Documents\Results')
    workbook = xlsxwriter.Workbook(datetime_output_results+'.xlsx')
    worksheet = workbook.add_worksheet()
    bold = workbook.add_format({'bold': True})
    worksheet.set_column('A:A', 20)
    worksheet.write('A1', test1())
    worksheet.write('B1', test2())
    workbook.close()

Обратите внимание, я только что вызвал функции, где вам нужны их результаты. Другие переменные, которые здесь отсутствуют, я полагаю, уже определены в другом месте вашего кода.

РЕДАКТИРОВАТЬ:

В качестве альтернативы, как я понимаю из ваших комментариев, вы можете вызывать save_results из каждого теста,только когда он запущен, но вы должны заставить save_results принимать некоторые аргументы:

def save_results(result, target_cell):
    os.chdir(r'C:\Users\vrozakos\Documents\10P_Results')
    workbook = xlsxwriter.Workbook(datetime_output_results+'.xlsx')
    worksheet = workbook.add_worksheet()
    bold = workbook.add_format({'bold': True})
    worksheet.set_column('A:A', 20)
    worksheet.write(target_cell, result)
    workbook.close()

def test1():
    output = str(ser.read(1000).decode())
    output = str(output)
    if "0x1" in output :
        result = 'Pass'
    else:
        result = 'Fail'
    print(result)
    save_results(result, 'A1')

def test2():
    output2 = str(ser.read(1000).decode())
    print(output2)
    test2_output = str(output2)
    if "0x1" in test2_output:
        result = 'Pass'
    else:
        result = 'Fail'
    print(result)
    save_results(result, 'B1')

Однако вы должны заметить, что вызов save_results добавляет новый лист каждый раз, когда он вызывается, вы, вероятно, захотитеизменить эту функцию, чтобы каждый раз записывать в одну и ту же таблицу (но это тема для другого вопроса по этому вопросу).

Как я уже сказал, в вашем коде много проблем, но основная логика здесь (в обоих моих примерах) нет проблем с вызовом функций внутри друг друга, чтобы получить свои результаты (или передать им аргументы).

0 голосов
/ 09 октября 2019

Вы можете получить значение в своей основной функции из функции pll_test. Вы должны добавить строку как return после оператора print, если вы намереваетесь вернуться после оператора print.

Теперь возвращаемое значение передается в качестве аргумента для вызова функции save_results.

0 голосов
/ 09 октября 2019
def save_results(result):
    os.chdir(r'C:\Users\vrozakos\Documents\10P_Results')
    workbook = xlsxwriter.Workbook(datetime_output_results+'.xlsx')
    worksheet = workbook.add_worksheet()
    bold = workbook.add_format({'bold': True})
    worksheet.set_column('A:A', 20)
    worksheet.write('A1', 'PLL TEST', bold)
    worksheet.write('B1',result) --> result is string value from pll_test function
    workbook.close()

def pll_test():
    output = str(ser.read(1000).decode())
    alarm_output = str(output)
    if "pll reg=0x1 val=0x3f" in alarm_output :
        save_results("pass") --> pass value to function
        print('Pass')
    else:
        save_results("fail")
        print('fail')
...