【发布时间】:2013-04-26 18:00:28
【问题描述】:
我正在尝试使用subprocess.call 从 Iron python 调用 python 2.7 脚本。
调用的进程使用 IronPython 不支持的导入,例如 scikit-learn 和 requests。
目前我正在尝试使用此命令调用 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 运行它导致它失败有什么区别??
谢谢
---编辑---
看来我也不能导入 encodings.idna :
ImportError: 没有名为 idna 的模块
这很奇怪...
打印sys.path显示c:\\Python27\\Lib在那里,idna.py文件在encodings目录下……怎么导入不行???
---再编辑---
我找到了解决问题的一种方法——从 python shell 启动 IronPython 脚本——一切正常。我仍然不知道为什么从 IronPython 调用 python 2.7 解释器会干扰 python 2.7 内部模块...... PYTHONPATH 确实包含这些模块的路径,所以我非常感谢任何关于幕后发生的事情的见解。
【问题讨论】:
-
创建一个完整的最小代码示例来显示问题并发布完整的回溯,例如,将
print u'abc'.encode('idna')放入child.py文件并从parent.py调用它:import subprocess; subprocess.call([r'c:\Python27\python.exe', 'child.py'])。首先使用 CPython 运行parent.py(以确保它按预期工作)然后使用 IronPython 运行parent.py并查看它是否会重现问题。 -
@J.F.Sebastian - 我无法按照您建议的方式重现错误。使用 IronPython 运行
parent.py时效果很好... -
这意味着 CPython 2.7 发现“idna”编码很好。如果你从 parent.py 而不是 child.py 调用 brainManager_toFile.py 会发生什么?
-
hm... 也可以。似乎唯一的问题是从 Eclipse 运行它时。仍然不知道为什么,但我会放手..谢谢你
标签: python subprocess ironpython