如何在python中一次将多个文件从本地服务器移动到HDFS?

如何在python中一次将多个文件从本地服务器移动到HDFS?,python,python-3.x,hadoop,subprocess,hdfs,Python,Python 3.x,Hadoop,Subprocess,Hdfs,我在服务器上使用python v3.4,经常需要将多个文件从本地目录复制/移动到hdfs目录。我的所有文件都在子目录中,而子目录又在MyDir中。这是我使用的命令- $hdfs dfs-copyFromLocal MyDir/*/path/to/hdfs/ 这个命令在服务器上运行得很好,但当我在python中使用subprocess时使用相同的命令 >子流程调用(['hdfs','dfs','-copyFromLocal','MyDir/*','/path/to/hdfs/']) 它给出了以下错

我在服务器上使用python v3.4,经常需要将多个文件从本地目录复制/移动到hdfs目录。我的所有文件都在子目录中,而子目录又在MyDir中。这是我使用的命令-

$hdfs dfs-copyFromLocal MyDir/*/path/to/hdfs/

这个命令在服务器上运行得很好,但当我在python中使用subprocess时使用相同的命令

>子流程调用(['hdfs','dfs','-copyFromLocal','MyDir/*','/path/to/hdfs/'])

它给出了以下错误-

copyFromLocal: `MyDir/*': No such file or directory
1
另外,我还尝试了
['hadoop'、'fs'、'-put'..]
而不是
['hdfs'、'dfs'、'-copyFromLocal'..]
,它也不起作用

有人能帮我吗?任何帮助都将不胜感激


编辑-我需要将文件与子目录一起移动。

添加
shell=True

>>> subprocess.call(['hdfs', 'dfs', '-copyFromLocal', 'MyDir/*', '/path/to/hdfs/'], shell=True)

阅读本文:

我将编写一个带有子进程的函数,它将为您提供输出和错误:

import subprocess
def run_cmd(args_list):
    """
    run linux commands
    """
    # import subprocess
    print('Running system command: {0}'.format(' '.join(args_list)))
    proc = subprocess.Popen(args_list, stdout=subprocess.PIPE, stderr=subprocess.PIPE)
    s_output, s_err = proc.communicate()
    s_return =  proc.returncode
    return s_return, s_output, s_err
然后:


这将遍历目录中的所有文件,并将它们放在所需的HDFS目录中

将命令中的所有内容附加到单个字符串中,并给出参数shell=True

subprocess.call('hdfs dfs -copyFromLocal MyDir/* /path/to/hdfs/', shell = True)

我试过了,它返回了
hadoop命令用法
以及
zero exit status
,但是当我检查hdfs路径中的文件时,它们不在那里。
subprocess.call('hdfs dfs -copyFromLocal MyDir/* /path/to/hdfs/', shell = True)