【问题标题】:Running a unicode batch file in windows 7, python 2.x在 Windows 7、python 2.x 中运行 unicode 批处理文件
【发布时间】:2012-03-08 12:10:29
【问题描述】:

在运行路径名中包含 unicode 字符的批处理文件时遇到了 subprocess.open() 的问题。这在 2.6 和 2.7 中会出现问题,但在 3.2 中可以完美运行。真的只是一个一直持续到 py3k 的 bug??

# -*- coding: utf-8 -*-

o = u"C:\\temp\\test.bat"        #"control" case
q = u"C:\\temp\\こんにちは.bat"

ho = open(o, 'r')
hq = open(q, 'r')               #so we can open q

ho.close()
hq.close()

import subprocess
subprocess.call(o)              #batch runs
subprocess.call(q)              #nothing from here on down runs
subprocess.call(q, shell=True)
subprocess.call(q.encode('utf8'), shell=True)   
subprocess.call(q.encode('mbcs'), shell=True)  #this was suggested elsewhere for older windows

【问题讨论】:

  • 顺便说一句,有许多近乎重复的内容,但我相信这与我看过的所有内容都略有不同。
  • 这个问题有什么不同? subprocess 模块在 2.x 版本中存在 unicode 字符串问题。从 3.0 开始,所有字符串都是 unicode,问题就消失了。
  • 好吧,这似乎是一个非常有名的错误。也许我只是无法让自己相信!

标签: python subprocess


【解决方案1】:

文件名作为 (Unicode) 字符串传递给 API 并从 API 返回。 这可能会出现特定于平台的问题,因为在某些平台上 文件名是任意字节字符串。 (另一方面,在 Windows 文件名本机存储为 Unicode。)作为一种解决方法,大多数 API(例如 open() 和 os 模块中的许多函数) 文件名接受字节对象和字符串,一些 API 有 一种请求字节返回值的方法。因此, os.listdir() 返回一个 如果参数是字节实例,则为字节实例列表,并且 os.getcwdb() 以字节形式返回当前工作目录 实例。请注意,当 os.listdir() 返回字符串列表时, 无法正确解码的文件名被省略而不是 引发 UnicodeError。

来自whats new in 3.0 页面。

【讨论】:

  • 谢谢。我应该查看 3.0 发行说明,但在 2.7 文档中找不到对此的任何引用。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-07-12
  • 1970-01-01
  • 2012-12-02
  • 1970-01-01
相关资源
最近更新 更多