我對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