Python3 FileNotFoundError 与任何文件,使用 subprocess.popen()

Posted

技术标签:

【中文标题】Python3 FileNotFoundError 与任何文件,使用 subprocess.popen()【英文标题】:Python3 FileNotFoundError with any file, using subprocess.popen() 【发布时间】:2020-03-16 11:56:36 【问题描述】:

我一直在尝试从 pickle 文件中加载数据,以便在 Windows 上与 pySpark 一起使用

这是我的代码:

import subprocess
import pickle

proc = subprocess.Popen(["cat", "./users-partition.pickle"],
                    stdout=subprocess.PIPE)
pickle_content = proc.communicate()[0]
partition = pickle.loads(pickle_content)
len(partition)

我已经在网上搜索了几个小时来完成这项工作,但仍然没有运气。 错误信息(第 3 行)是:

FileNotFoundError: [WinError 2] The system cannot find the file specified

尝试了各种文件,肯定都在当前工作目录中。 将不胜感激任何帮助!谢谢!!

【问题讨论】:

看起来您在 Windows 上。你的%PATH% 上有一个名为cat.exe 的程序吗? 另外,你为什么要尝试运行一个子进程来 cat 一个泡菜文件? 1.检查并发现路径变量2中没有这样的值。它是大数据analisys课程家庭作业的py脚本的一部分,只是真正遵循脚本 @VictorMartinov 你应该用open()打开泡菜文件然后read()它,或者pickle.load(open("./users-partition.pickle", "rb")) @BrianCain 谢谢,pickle.load(open("./users-partition.pickle", "rb")) 命令似乎可以正常工作!我猜原始脚本假定操作系统是 linux,这就是它不起作用的原因(Windows 上没有“cat”命令)。 【参考方案1】:

而不是像在 Windows 上那样使用路径中可能不存在的 cat。你可以只使用内置在文件处理中的 python。

file = open('./users-partition.pickle','r')
text = file.read()

变量 'text' 将包含 cat 在那时返回的所有内容。在此处了解更多信息: https://www.w3schools.com/python/ref_func_open.asp

【讨论】:

谢谢!但这些命令没有按需要读取泡菜文件(字典格式)。在这种情况下,命令pickle.load(open("./users-partition.pickle", "rb")) 做得更好。

以上是关于Python3 FileNotFoundError 与任何文件,使用 subprocess.popen()的主要内容,如果未能解决你的问题,请参考以下文章

子进程 FileNotFoundError

python FileNotFoundError: [WinError 2] 系统找不到指定的文件。

FileNotFoundError:找不到模块“libvlc.dll”

Pandas.read_csv() FileNotFoundError 即使文件存在

Python:所有Subprocess调用上的“FileNotFoundError”

当“try .. except IOError”未捕获时如何处理 FileNotFoundError?