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

使用subprocess.getstatusoutput执行命令丢失斯洛文尼亚语特殊字符

解决subprocess.getstatusoutput调用bash脚本时特殊字符乱码问题

问题根源

Python 3.8的subprocess.getstatusoutput在非交互式场景调用子进程时,会继承不完整的locale环境变量,导致终端默认的UTF-8编码未被正确应用,斯洛文尼亚语特殊字符(如ž)因此被替换为?。而直接在终端执行脚本时,你的shell环境已配置了正确的UTF-8 locale,所以显示正常。

可行解决方案

1. 改用subprocess.run并显式指定编码

放弃使用getstatusoutput,直接用subprocess.run并指定encoding='utf-8',确保以UTF-8编码读取输出:

import subprocess

# 替换为你的脚本路径
result = subprocess.run(
    ['/path/to/your/script.sh'],
    capture_output=True,
    encoding='utf-8',
    check=False
)
exit_code = result.returncode
output = result.stdout
print(output)

2. 给getstatusoutput传递正确的locale环境变量

如果必须使用getstatusoutput,复制当前环境变量并设置斯洛文尼亚语UTF-8 locale后传入:

import subprocess
import os

env = os.environ.copy()
env['LC_ALL'] = 'sl_SI.UTF-8'
env['LANG'] = 'sl_SI.UTF-8'

status, output = subprocess.getstatusoutput(
    ['/path/to/your/script.sh'],
    env=env
)
print(output)

注意:先通过locale -a命令检查系统是否已安装sl_SI.UTF-8 locale,若未安装,执行sudo locale-gen sl_SI.UTF-8生成。

3. 在bash脚本中强制设置编码

在脚本开头添加环境变量设置,让脚本自身强制输出UTF-8编码内容:

export LC_ALL=sl_SI.UTF-8
export LANG=sl_SI.UTF-8

# 脚本原有内容示例
echo "država"

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.16 22:15:36