LookupError:未知编码:idna - 仅来自subprocess.call

时间:2013-04-25 07:50:15

标签: python subprocess ironpython

我试图使用subprocess.call从Iron python调用python 2.7脚本。 被调用的进程使用IronPython中不支持的导入,如scikit-learnrequests

目前我正在尝试使用此命令调用python 2.7脚本:

sub_ret_val = subprocess.call("C:/Documents and Settings/avishay/workspace/BursaProject_V1_31/brainManager_toFile.py", shell = True, stderr = subprocess.STDOUT)

但是我得到了:

  

LookupError:未知编码:idna

现在,如果我从windows shell或eclipse pydev环境运行它,这个脚本工作正常。从shell运行它到从subprocess.call运行它导致它失败的区别是什么?

由于

--- --- EDIT

我似乎无法导入encodings.idna:

  

ImportError:没有名为idna的模块

这非常非常奇怪...... 打印sys.path显示c:\\Python27\\Lib在那里,而idna.py文件在编码目录中...如何导入不起作用???

---一个更多的编辑---

我找到了解决问题的方法 - 从python shell启动IronPython脚本 - 一切正常。我仍然不知道为什么从IronPython调用python 2.7解释器会干扰python 2.7内部模块... PYTHONPATH确实包含了这些模块的路径,所以我非常感谢任何洞察到幕后发生的事情。

1 个答案:

答案 0 :(得分:3)

IronPython doesn't support idna encoding可能是used by requests module

idna encoding is available since Python 2.3

>>> u"яндекс.рф".encode('idna')
b'xn--d1acpjx3f.xn--p1ai'
>>> b'xn--d1acpjx3f.xn--p1ai'.decode('idna')
'яндекс.рф'

为避免模糊使用python运行脚本,请尝试明确指定Python可执行文件的路径:

from subprocess import STDOUT, check_output as qx

output = qx([r"c:\Python27\python.exe", r"c:\path\to\script.py"], stderr=STDOUT)

作为替代方案,您可以安装pylauncher,以便能够在其shebang行中为Python脚本指定所需的Python版本,例如#!python2.7