使用 subprocess.run 打印 Python 输出并通过电子邮件发送出去

问题描述 投票:0回答:0

我正在尝试打印 Python 输出并发送电子邮件,但当我调用 subprocess.run() 函数时,它被卡住了。我不确定问题是什么。

run_email 函数:

@staticmethod
def run_email(log_filename, sender_email, sender_password, receiver_email):
    log_mod.setup_logging(log_filename)

    # Run your script as a subprocess and capture its output
    command = [sys.executable,
                "C:\\Users\\digital\\PycharmProjects\\pythonProject\\data\\downloads\\local_loadscript.py"]
    completed_process = subprocess.run(command, capture_output=True, text=True)
    print(completed_process.stdout)
    captured_output = completed_process.stdout
    print(captured_output)
    log_mod.log("Captured script output:\n" + captured_output)

    # Send email with log content
    with open(log_filename, 'r') as log_file:
        log_content = log_file.read()
        print(log_content)
    log_mod.send_email(log_filename, log_content, sender_email, sender_password, receiver_email)

我就是这么称呼它的:

if __name__ == "__main__":
obj = LocalStorage()
obj.my_list_bucket(base_folder, current_day)  # execute code
obj.run_email("Data Loading Log for {}".format(current_day), sender_email, sender_password, receiver_email)

我做了一些更改,但由于某种原因它正在循环: 更改:

completed_process = subprocess.run(command,capture_output=True, text=True)

致:

completed_process = subprocess.run(command, stdout=subprocess.PIPE)

这是输出,它不断循环 futurewarning 消息:

C:\Users\digital\PycharmProjects\pythonProject\data\downloads\local_loadscript.py:312: FutureWarning: 正则表达式的默认值在未来版本中将从 True 更改为 False。此外,当 regex=True 时,单字符正则表达式不会被视为文字字符串。 bdf.columns = bdf.columns.str.strip().str.replace('.', '').str.replace(' ', '').str.lower() C:\Users\digital\PycharmProjects\pythonProject\data\downloads\local_loadscript.py:312: FutureWarning: 正则表达式的默认值在未来版本中将从 True 更改为 False。此外,当 regex=True 时,单字符正则表达式不会被视为文字字符串。 bdf.columns = bdf.columns.str.strip().str.replace('.', '').str.replace(' ', '').str.lower()

C:\Users\digital\PycharmProjects\pythonProject\data\downloads\local_loadscript.py:312: FutureWarning: 正则表达式的默认值在未来版本中将从 True 更改为 False。此外,当 regex=True 时,单字符正则表达式不会被视为文字字符串。 bdf.columns = bdf.columns.str.strip().str.replace('.', '').str.replace(' ', '').str.lower() 已将 2380 行和 15 列加载到analyticsdata-222222.emaildownloads.adara_20230905

已将 6 行和 12 列加载到analyticsdata-222222.downloads.adarasummary_20230905 20230905的数据加载日志 C:\Users\digital\PycharmProjects\pythonProject\data\downloads\local_loadscript.py:312: FutureWarning: 正则表达式的默认值在未来版本中将从 True 更改为 False。此外,当 regex=True 时,单字符正则表达式不会被视为文字字符串。 bdf.columns = bdf.columns.str.strip().str.replace('.', '').str.replace(' ', '').str.lower()

C:\Users\digital\PycharmProjects\pythonProject\data\downloads\local_loadscript.py:312: FutureWarning: 正则表达式的默认值在未来版本中将从 True 更改为 False。此外,当 regex=True 时,单字符正则表达式不会被视为文字字符串。 bdf.columns = bdf.columns.str.strip().str.replace('.', '').str.replace(' ', '').str.lower()

C:\Users\digital\PycharmProjects\pythonProject\data\downloads\local_loadscript.py:312: FutureWarning: 正则表达式的默认值在未来版本中将从 True 更改为 False。此外,当 regex=True 时,单字符正则表达式不会被视为文字字符串。 bdf.columns = bdf.columns.str.strip().str.replace('.', '').str.replace(' ', '').str.lower()

C:\Users\digital\PycharmProjects\pythonProject\data\downloads\local_loadscript.py:312: FutureWarning: 正则表达式的默认值在未来版本中将从 True 更改为 False。此外,当 regex=True 时,单字符正则表达式不会被视为文字字符串。 bdf.columns = bdf.columns.str.strip().str.replace('.', '').str.replace(' ', '').str.lower() C:\Users\digital\PycharmProjects\pythonProject\data\downloads\local_loadscript.py:312: FutureWarning: 正则表达式的默认值在未来版本中将从 True 更改为 False。此外,当 regex=True 时,单字符正则表达式不会被视为文字字符串。 bdf.columns = bdf.columns.str.strip().str.replace('.', '').str.replace(' ', '').str.lower()

C:\Users\digital\PycharmProjects\pythonProject\data\downloads\local_loadscript.py:312: FutureWarning: 正则表达式的默认值在未来版本中将从 True 更改为 False。此外,当 regex=True 时,单字符正则表达式不会被视为文字字符串。 bdf.columns = bdf.columns.str.strip().str.replace('.', '').str.replace(' ', '').str.lower()

好吧,我没有使用 subprocess.run 来获取输出,而是使用 sys.stdout。 output_file_path = "output.txt" # Define the path for capturing output # Redirect stdout to a file with open(output_file_path, "w") as file: sys.stdout = file # Call the function or block of code to capture its output # Restore stdout to the original value (typically the console) sys.stdout = sys.__stdout__ # Optionally, you can read and print the captured output from the file with open(output_file_path, "r") as file: captured_output = file.read() print("Captured Output:") print(captured_output) # Send the captured output as an email subject = "Captured Output for {}".format(current_day) body = "Please find the attached captured output." log_mod.send_email(subject, body, output_file_path, "[email protected]", "sender_password", "[email protected]")

python subprocess
© www.soinside.com 2019 - 2024. All rights reserved.