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

Python脚本执行后意外给所有行添加换行符问题

问题:3proxy配置文件修改后所有行被空行分隔

执行Python脚本修改3proxy.cfg后,文件内所有行都被空行分隔,尝试调整\r、\n、\r\n等换行符均无法解决问题。

原脚本代码

import sys
import fileinput
nameuser = "users1"
psuser = "pass1"
file_name = '/usr/local/etc/3proxy.cfg'
for line in fileinput.FileInput(file_name,inplace=1):
    if 'auth strong' in line:
        line = line.replace(line, line+'########################################################################## '+ nameuser +' ##########################################################################'+'\r' + 'users '+ nameuser +':CL:'+ psuser +'\r'+ 'allow login,'+ nameuser +'\r''flush')
        print (line)

处理前的3proxy.cfg内容

daemon

nserver 11111
nserver 22222
nscache 65536

timeouts 1 5 30 60 180 1800 15 60
log /var/log/3proxy/log D
logformat "- +_L%t.%. %N.%p %E %U %C:%c %R:%r %O %I %h %T"
logformat "L%t.%. %N.%p %E %U %C:%c %R:%r %Q:%q %O %I %h %T %n "

rotate 360
#external 0.0.0.0
#internal 0.0.0.0

auth strong

deny *

maxconn 254

setgid 65534
setuid 65534

问题原因

  1. fileinput读取的每一行line本身已包含换行符(\n),而Python的print()函数默认会在输出末尾追加一个\n,导致每行实际输出两个换行符,形成空行分隔。
  2. 原脚本仅对包含auth strong的行执行print,未处理其他行,会导致这些行被从文件中删除(inplace=1模式下,未被print的行不会保留)。

修复方案

修改脚本,解决换行重复问题,并确保所有行都被输出:

import sys
import fileinput
nameuser = "users1"
psuser = "pass1"
file_name = '/usr/local/etc/3proxy.cfg'
for line in fileinput.FileInput(file_name, inplace=1):
    # 移除原行末尾的换行符,避免重复输出
    line = line.rstrip('\r\n')
    if 'auth strong' in line:
        # 用f-string格式化新内容,自然换行更易读
        new_content = f'''{line}
########################################################################## {nameuser} ##########################################################################
users {nameuser}:CL:{psuser}
allow login,{nameuser}
flush'''
        print(new_content)
    else:
        # 输出原行,避免丢失非目标行
        print(line)

关键修改点

  • 用rstrip('\r\n')清除原行自带的换行符,避免与print默认追加的换行符重复。
  • 使用f-string拼接新内容,直接用换行符分隔新行,避免手动拼接转义字符出错。
  • 添加else分支,保证原文件中所有非目标行都能被正常保留。
  • 替换原脚本中的\r为标准换行符\n(Linux系统默认用\n,Windows系统可改为\r\n)。

内容的提问来源于stack exchange,提问作者Андрей

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.02 02:45:17