使用 Python popen 的奇怪位数问题
Posted
技术标签:
【中文标题】使用 Python popen 的奇怪位数问题【英文标题】:Weird bitness issues using Python popen 【发布时间】:2016-09-05 06:48:50 【问题描述】:所以我从 Python subprocess.popen
调用一个外部可执行文件(Rscript.exe
作为R portable 的一部分)。
从 32 位 python 调用,它可以工作。
从64位python调用,R抱怨找不到各种包,所以有些不一样。
不应进行任何文件系统重定向(Rscript.exe
的路径不在程序文件中)
这可能是 python 问题、R 问题或两者兼而有之。为什么根据称为 popen 的进程的位数,任何事物的行为都会有所不同?从 Rscript 的角度来看,我可以强制来自 64 位 python 的调用看起来像 32 位调用吗?
【问题讨论】:
你能把代码和错误信息贴出来吗? 这是在 Windows 上吗?为什么不使用 R64? 请检查 PATH、当前目录和任何库路径以获取来自两个 python 的调用。 使用linux,遇到过类似的情况。我使用system("sh -c 'unset LD_LIBRARY_PATH;executable'")
修复了这个问题在 Windows 上,可能是 PATH 设置错误,即加载了错误的 DLL
更新:已解决。这不是位问题。 Popen 将环境变量传递给子进程。我在Popen
调用中设置了env=
,它现在可以工作了。
【参考方案1】:
当您将 subprocess.Popen 类用于子程序或线程时,它会创建一个到 shell 或命令提示符的管道,您可以将参数以字符串的形式传递给 subprocess.Popen 类的对象。该命令在 shell 中运行并被执行。 所以出现的错误既不是 python 问题,也不是 R 问题。 您的环境变量和系统路径存在问题。 您可能没有保存 R 的环境路径,因此无法获取 Rscript.exe 执行。 并且没有直接可用于搜索文件夹/文件以执行的文件/目录重定向系统。
为 R 设置系统路径变量,您的问题有望得到解决
【讨论】:
以上是关于使用 Python popen 的奇怪位数问题的主要内容,如果未能解决你的问题,请参考以下文章
带有标准输入的 subprocess.Popen.communicate() 的管道损坏
python 使用``subprocess.Popen``修复python 2.7 windows unicode问题。