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字段。也可以实现相应的功能。

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • Python 二三事 面向初学者介绍Python相关的一些工具,以及可能遇到的常见问题。 最后更新 2013.5....
    hzyido阅读 67,781评论 2 42
  • 字符集和编码简介 在编程中常常可以见到各种字符集和编码,包括ASCII,MBCS,Unicode等字符集。确切的说...
    兰山小亭阅读 8,580评论 0 13
  • Python语言特性 1 Python的函数参数传递 看两个如下例子,分析运行结果: 代码一: a = 1 def...
    伊森H阅读 3,083评论 0 15
  • 第 2 章 SHELL 基础知识2.1 shell脚本我们在上面简单介绍了一下什么是shell脚本,现在我们来进一...
    LiWei_9e4b阅读 1,590评论 0 0
  • title: python高级进阶 参考文献 https://pythonguidecn.readthedocs....
    采香行处蹙连钱阅读 2,549评论 1 5