Python使用subprocess执行命令时svn报错

问题描述

今天使用subprocess执行svn命令的时候,发现报了个错。

svn: E000022: Can't convert string from native encoding to 'UTF-8'

看这个报错信息感觉是输入的字符集不是UTF-8,导致传递给svn的时候出了问题。

问题解决

在Python脚本中指定脚本使用的系统变量。

os.environ['LANG']="zh_CN.UTF-8"

问题原因

查错的时候首先检查了一下输入输出,发现确实已经经过了正确的encode和decode。

尝试了几次之后,尝试通过命令行运行,检查是不是svn本身的原因,发现没有问题。

这样就确定是Python方面的问题了。然后改从命令行执行脚本,发现也是正常的。

那么Pycharm和命令行执行的最大的相关的差别,就在于环境变量的不同了。这时想到了之前看过的关于环境变量的设置,添加了中文。果然好了。

使用subprocessing的时候,相当于开了一个新的子线程来进行工作。从zsh来执行一个Python脚本的时候,Python会继承使用原来的那套环境变量,所以如果terminal进行了正确的设置,就不会有问题。但是从IDE运行的时候,环境变量默认是空的。

解决这个问题不仅可以使用代码添加,也可以在Pycharm中设置脚本的运行环境。具体设置在菜单Edit->Run configurations中,Environment variables字段。添加LANG字段。也可以实现相应的功能。

参考文献

  1. 设置Pycharm环境变量
  2. svn: Can’t convert string from ‘UTF-8’ to native encoding 的解决办法
  3. OS.ENVIRON()详解
    原文作者:Fengya
    原文地址: https://www.jianshu.com/p/43dc724192fc
    本文转自网络文章,转载此文章仅为分享知识,如有侵权,请联系博主进行删除。
点赞