使用 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问题。

如何使用子进程popen Python [重复]

在 Python 中分析子进程 Popen 调用

杀死使用 Python 的 subprocess.Popen() 创建的进程 [重复]

在 django 视图中使用 subprocess.Popen() 执行 python 脚本