从网站TXT获取代码写入Python临时可执行文件报错求助
问题分析与解决
你遇到的TypeError是因为urlopen()返回的是HTTPResponse对象,不是本地文件路径字符串,而open()函数只接受文件路径类的参数,直接用它调用open()必然报错。
要实现从网站获取TXT代码并生成可执行临时Python脚本,正确步骤如下:
- 先从URL读取文本内容
- 创建带文件名的临时文件(执行脚本必须有可访问的文件名,
tempfile.TemporaryFile无公开文件名,不适用) - 将读取到的代码写入临时文件
- 执行该临时脚本
- 确保临时文件被清理
修正后的代码:
from urllib.request import urlopen import tempfile import subprocess import os # 1. 从目标URL读取脚本内容 response = urlopen("https://randomsiteeeee.000webhostapp.com/script.txt") script_content = response.read().decode('utf-8') # 把字节内容解码为字符串 # 2. 创建带.py后缀的临时文件,保留文件名以便执行 with tempfile.NamedTemporaryFile(mode='w', suffix='.py', delete=False) as temp_file: temp_file.write(script_content) temp_file_path = temp_file.name try: # 3. 运行临时Python脚本 subprocess.run(['python', temp_file_path], check=True) finally: # 4. 无论执行结果如何,清理临时文件 os.remove(temp_file_path)
关键细节:
NamedTemporaryFile:生成可被外部进程访问的文件名,满足脚本执行的路径需求;TemporaryFile仅能通过当前进程句柄访问,无法用于外部调用。decode('utf-8'):将HTTP响应的字节数据转为字符串,确保文本内容正确写入文件。finally块:保证临时文件在脚本执行完成后被删除,避免残留文件占用空间。
内容的提问来源于stack exchange,提问作者munip
相关产品推荐
相关产品推荐

