我正在尝试打印 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]")