gpt4 book ai didi

python - LookupError : unknown encoding: idna - only from subprocess. 调用

转载 作者:行者123 更新时间:2023-11-28 16:43:36 26 4
gpt4 key购买 nike

我正在尝试使用 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: unknown encoding: idna

现在,如果我从 windows shell 或从 eclipse pydev 环境运行该脚本,它就可以正常工作。从 shell 运行它与从 subprocess.call 运行它导致它失败有什么区别??

谢谢

---编辑---

看来我也无法导入 encodings.idna :

ImportError: No module named idna

这很奇怪...打印 sys.path 显示 c:\\Python27\\Lib 在那里,并且 idna.py 文件在 encodings 目录中......怎么导入不工作???

---再编辑---

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

最佳答案

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

关于python - LookupError : unknown encoding: idna - only from subprocess. 调用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16209175/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com