You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Linux服务运行Python程序无法生成CSV文件求助

问题原因及解决办法

1. 相对路径导致文件生成位置不符

Linux服务默认工作目录通常不是你的Python脚本所在目录,使用相对路径'file.csv'时,文件可能被创建在系统默认目录(如/或/var/lib/systemd/system/),而非你预期的位置。

解决办法:使用绝对路径指定CSV文件位置,可通过脚本自身路径拼接:

import os
# 获取脚本所在目录的绝对路径
script_dir = os.path.dirname(os.path.abspath(__file__))
csv_file_path = os.path.join(script_dir, 'file.csv')

with open(csv_file_path, mode='w', newline='') as csv_file:
    # 后续代码保持不变

2. 服务运行用户无写入权限

Linux服务一般以特定用户(如root、www-data或自定义服务用户)运行,若该用户对CSV文件目标目录无写入权限,会导致文件无法创建。

解决办法:

  • 确认服务运行用户:以systemd服务为例,查看服务配置文件中的User字段。
  • 为目标目录设置正确权限:
# 示例:创建日志目录并赋予服务用户权限
sudo mkdir -p /var/log/connection_logs
sudo chown your_service_user:your_service_user /var/log/connection_logs
sudo chmod 755 /var/log/connection_logs
  • 将CSV文件路径指向该有权限的目录。

3. 文件缓冲区未及时刷新

Python文件对象默认使用缓冲机制,在持续运行的服务中,写入的数据可能暂存于内存缓冲区,未立即写入磁盘,导致看起来文件未生成。

解决办法:

  • 打开文件时启用行缓冲:
with open(csv_file_path, mode='w', newline='', buffering=1) as csv_file:
    # 后续代码不变
  • 或在每次写入后手动刷新缓冲区:
writer.writerow({'Timestamp': time,
                 'IP Address': client_address[0],
                 'Port': client_address[1]})
csv_file.flush()  # 强制将缓冲区数据写入磁盘

额外优化:时间戳错误

你的代码中time变量在循环外定义,所有连接记录的时间均为程序启动时间,而非连接到达时间。建议将时间戳生成移至循环内部:

while True:
    client_socket, client_address = server_socket.accept()
    # 每次连接时生成当前时间
    current_time = datetime.datetime.now().strftime('%y-%m-%d %H:%M:%S')
    print('IP: ',client_address[0], 'Porta: ', client_address[1], 'Data: ', current_time)
    writer.writerow({'Timestamp': current_time,
                     'IP Address': client_address[0],
                     'Port': client_address[1]})
    client_socket.close()

内容的提问来源于stack exchange,提问作者Artur Borbely

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.26 07:42:55