我对Nautilus文件浏览器(AFAIK仅在GNU/Linux/Unix/etc环境中运行)有一个Python扩展。我决定拆分一个昂贵的计算并将其作为一个子进程运行,腌制结果并通过管道发回。我的问题涉及至这个脚本。由于计算需要一个路径参数和一个布尔参数,我想我可以通过两种方式做到这一点:通过一个管道发送一个腌制元组中的参数,或者在命令行上给它们。我发现pickle tuple方法明显比仅仅提供参数要慢,所以我采用了子进程参数方法。对子进程的参数进行编码.Popen
但是,我很担心可能出现的本地化问题。目前,来电我:
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作为默认字符编码,这会失败吗?或者没有关系?
+1参数对Unicode没有任何了解,它们只是传递字节,并由您来解释它们。 – bobince 2009-10-21 02:32:40
好的,这就是问题的实质:“参数必须是用户区域编码的字符串,还是只能是任意字节序列?”看起来答案是后者。 谢谢:) – detly 2009-10-21 04:29:51
@detly,是的,好的方式把它!接收参数的过程负责对它们进行解码(如果需要的话),这当然有代价,但它也有一些优势,比如允许“任意字节序列”(只要谁发送序列,收件人,关于其含义,编码等等; - )。 – 2009-10-21 05:38:28