python - 使用子进程输出到 HDFS 中的文件

标签 python subprocess hdfs

我有一个脚本,它逐行读取文本,稍微修改该行,然后将该行输出到文件。我可以很好地将文本读入文件,问题是我无法输出文本。这是我的代码。

cat = subprocess.Popen(["hadoop", "fs", "-cat", "/user/test/myfile.txt"], stdout=subprocess.PIPE)
for line in cat.stdout:
    line = line+"Blah";
    subprocess.Popen(["hadoop", "fs", "-put", "/user/test/moddedfile.txt"], stdin=line)

这是我遇到的错误。

AttributeError: 'str' object has no attribute 'fileno'
cat: Unable to write to output stream.

最佳答案

stdin 参数不接受字符串。它应该是 PIPENone 或现有文件(具有有效 .fileno() 或整数文件描述符的文件)。

from subprocess import Popen, PIPE

cat = Popen(["hadoop", "fs", "-cat", "/user/test/myfile.txt"],
            stdout=PIPE, bufsize=-1)
put = Popen(["hadoop", "fs", "-put", "-", "/user/test/moddedfile.txt"],
            stdin=PIPE, bufsize=-1)
for line in cat.stdout:
    line += "Blah"
    put.stdin.write(line)

cat.stdout.close()
cat.wait()
put.stdin.close()
put.wait()

关于python - 使用子进程输出到 HDFS 中的文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22349733/

相关文章:

python - 运行 Python 延迟循环的最不痛苦的方法

hadoop - 生成数千张 map 的 pig 脚本

java - HDFS 文件观察服务

python - 从 python 执行 DevCon CMD 命令

python - 使 tkinter 标签按设定的时间间隔刷新,无需输入

Ruby 生成过程,捕获 STDOUT/STDERR,同时表现得就像定期生成一样

hadoop - AWS Elastic MapReduce下的Hive查询性能降低

python - Raspberry 上 Python 中的错误文件描述符错误(错误 9)

python - 多个构造函数 : the Pythonic way?

python - 访问 numpy 数组中的行特定元素的向量化方式