子进程popen以运行命令(HDFS/hadoop)

2024-10-01 13:43:45 发布

您现在位置:Python中文网/ 问答频道 /正文

我正在尝试使用subprocess.popen在我的计算机上运行命令。在

这就是我目前所拥有的

cmdvec = ['/usr/bin/hdfs', 'dfs', '-text', '/data/ds_abc/clickstream/{d_20151221-2300}/*', '|', 'wc', '-l']

subproc = subprocess.Popen(cmdvec, stdout=subprocess.PIPE, stdin=None, stderr=subprocess.STDOUT)

如果我在我的终端上运行这个命令,我会得到

^{pr2}$

数字15305是我想要的值。在

当我通过拆分命令并将其转换为一个列表来运行该命令时,我这样做是为了获得以下行:

for i in subproc.stdout:
    print(i)

但是,这给我的数据就好像这个命令是运行的,因为文件中的所有数据都在显示。在

/usr/bin/hdfs dfs -text /data/ds_abc/clickstream/{d_20151221-2300}/*

似乎没有使用管道|来计算所有文件中的行数


Tags: 数据text命令databinusrstdoutds
1条回答
网友
1楼 · 发布于 2024-10-01 13:43:45

在您的示例中,将管道|字符作为参数传递给subprocess.Popen不会像Bash那样创建进程管道。相反,管道|字符正被传递给单个进程的一个参数。在

相反,您需要将两个单独的subprocess.Popen调用链接在一起,以模拟Bash样式的管道。关于subprocess模块的文档包含更多详细信息。在

https://docs.python.org/2/library/subprocess.html#replacing-shell-pipeline

相关问题 更多 >