Skip to main content
 首页 » 编程设计

python之subprocess.Popen 参数的编码

2025年05月04日18insus

我有一个 Nautilus 文件浏览器的 Python 扩展(据我所知,它只在 GNU/Linux/Unix/etc 环境下运行)。我决定拆分一个昂贵的计算并将其作为子进程运行,pickle 结果并通过管道将其发回。我的问题涉及脚本的参数。由于计算需要一个路径参数和一个 bool 参数,我想我可以通过两种方式做到这一点:通过管道在腌制元组中发送参数,或者在命令行上提供它们。我发现 pickled tuple 方法比仅仅给出参数要慢得多,所以我选择了 subprocess 参数方法。

但是,我担心可能出现的本地化问题。目前,在调用者中我有:

subprocess.Popen( 
    [sys.executable, path_to_script, path.encode("utf-8"), str(recurse)], 
    stdin = None, 
    stdout = subprocess.PIPE) 

在脚本中:

path = unicode(sys.argv[1], "utf-8") 

我担心的是,将路径参数编码为 UTF-8 是一个错误,但我不确定。我想避免“它在我的机器上工作”综合症。如果用户将 latin1 作为他们的默认字符编码,这会失败吗?还是无所谓?

请您参考如下方法:

没关系:只要您的脚本知道参数需要 utf-8 编码,它就可以正确解码。 utf-8 是正确的选择,因为它可以让您编码任何 Unicode 字符串——不仅是某些语言的字符串,而不是其他语言的字符串,因为像 Latin-1 这样的选择就需要这样做!