未检测到Python subprocess.call参数

未检测到Python subprocess.call参数,python,Python,我有一个脚本,它使用Hadoop CLI将文件上传到HDFS 以下是片段: def hdfs_put(file_path, topic): print(file_path) print(topic) call(["/usr/local/hadoop-2.5.1/bin/hadoop fs -put", file_path, "/" + topic] , shell=True , stderr=STDOUT) 下面是我得到的(注意参数不

我有一个脚本,它使用Hadoop CLI将文件上传到HDFS

以下是片段:

def hdfs_put(file_path, topic):
    print(file_path)
    print(topic)
    call(["/usr/local/hadoop-2.5.1/bin/hadoop fs -put", file_path, "/" + topic]
         , shell=True
         , stderr=STDOUT)
下面是我得到的(注意参数不是空的):

avro/hdfs_1_2014-11-05.avro
hdfs
-put:参数不足:应为1,但得到0
用法:hadoop fs[通用选项]-put[-f][-p]。。。

shell=True
时,
args
应该包含一个要在shell中运行的字符串。您只需删除
shell=True
并稍微修改一下命令:

check_call(["/usr/local/hadoop-2.5.1/bin/hadoop", "fs", "-put", file_path, "/" + topic]
    , stderr=STDOUT)

我将它改为使用
check\u call
,因为这是检查错误的简单方法。

shell=True
时,
args
应该包含一个要在shell中运行的字符串。您只需删除
shell=True
并稍微修改一下命令:

check_call(["/usr/local/hadoop-2.5.1/bin/hadoop", "fs", "-put", file_path, "/" + topic]
    , stderr=STDOUT)

我将它改为使用
check\u call
,因为这是检查错误的简单方法。

shell=True
时,
args
应该包含一个要在shell中运行的字符串。您只需删除
shell=True
并稍微修改一下命令:

check_call(["/usr/local/hadoop-2.5.1/bin/hadoop", "fs", "-put", file_path, "/" + topic]
    , stderr=STDOUT)

我将它改为使用
check\u call
,因为这是检查错误的简单方法。

shell=True
时,
args
应该包含一个要在shell中运行的字符串。您只需删除
shell=True
并稍微修改一下命令:

check_call(["/usr/local/hadoop-2.5.1/bin/hadoop", "fs", "-put", file_path, "/" + topic]
    , stderr=STDOUT)

我将它改为使用
check\u call
,因为这是检查错误的简单方法。

您误用了shell=True选项

如果为True,则命令按原样传递给shell。你不需要把它分成一个列表

def hdfs_put(file_path, topic):
    print(file_path)
    print(topic)
    call("/usr/local/hadoop-2.5.1/bin/hadoop fs -put " + file_path + " /" + topic
          , shell=True
          , stderr=STDOUT)
或者,如果希望将参数作为列表,则必须删除Shell=True:

def hdfs_put(file_path, topic):
    print(file_path)
    print(topic)
    call(["/usr/local/hadoop-2.5.1/bin/hadoop", "fs", "-put", file_path,  "/" + topic]
         , stderr=STDOUT)

您误用了shell=True选项

如果为True,则命令按原样传递给shell。你不需要把它分成一个列表

def hdfs_put(file_path, topic):
    print(file_path)
    print(topic)
    call("/usr/local/hadoop-2.5.1/bin/hadoop fs -put " + file_path + " /" + topic
          , shell=True
          , stderr=STDOUT)
或者,如果希望将参数作为列表,则必须删除Shell=True:

def hdfs_put(file_path, topic):
    print(file_path)
    print(topic)
    call(["/usr/local/hadoop-2.5.1/bin/hadoop", "fs", "-put", file_path,  "/" + topic]
         , stderr=STDOUT)

您误用了shell=True选项

如果为True,则命令按原样传递给shell。你不需要把它分成一个列表

def hdfs_put(file_path, topic):
    print(file_path)
    print(topic)
    call("/usr/local/hadoop-2.5.1/bin/hadoop fs -put " + file_path + " /" + topic
          , shell=True
          , stderr=STDOUT)
或者,如果希望将参数作为列表,则必须删除Shell=True:

def hdfs_put(file_path, topic):
    print(file_path)
    print(topic)
    call(["/usr/local/hadoop-2.5.1/bin/hadoop", "fs", "-put", file_path,  "/" + topic]
         , stderr=STDOUT)

您误用了shell=True选项

如果为True,则命令按原样传递给shell。你不需要把它分成一个列表

def hdfs_put(file_path, topic):
    print(file_path)
    print(topic)
    call("/usr/local/hadoop-2.5.1/bin/hadoop fs -put " + file_path + " /" + topic
          , shell=True
          , stderr=STDOUT)
或者,如果希望将参数作为列表,则必须删除Shell=True:

def hdfs_put(file_path, topic):
    print(file_path)
    print(topic)
    call(["/usr/local/hadoop-2.5.1/bin/hadoop", "fs", "-put", file_path,  "/" + topic]
         , stderr=STDOUT)

我现在得到了这个错误:
FileNotFoundError:[Errno 2]没有这样的文件或目录:'/usr/local/hadoop-2.5.1/bin/hadoop-fs-put'
它确实存在,尽管:(venv)bash-4.1#/usr/local/hadoop-2.5.1/bin/hadoop-fs-put-put:参数不够:预期为1,但得到了0用法:hadoop-fs[通用选项]-put[-f p]@约翰多:我想你忘了像我一样分解指挥部。请仔细阅读我的答案并与您的代码进行比较。谢谢,错过了这一点,现在一切都正常了。我现在收到了以下错误:
FileNotFoundError:[Errno 2]没有这样的文件或目录:'/usr/local/hadoop-2.5.1/bin/hadoop fs-put'
,但它确实存在:(venv)bash-4.1#/usr/local/hadoop-2.5.1/bin/hadoop fs-put-put:参数不足:应为1,但得到0用法:hadoop fs[通用选项]-put[-f][-p]@约翰多:我想你忘了像我一样分解指挥部。请仔细阅读我的答案并与您的代码进行比较。谢谢,错过了这一点,现在一切都正常了。我现在收到了以下错误:
FileNotFoundError:[Errno 2]没有这样的文件或目录:'/usr/local/hadoop-2.5.1/bin/hadoop fs-put'
,但它确实存在:(venv)bash-4.1#/usr/local/hadoop-2.5.1/bin/hadoop fs-put-put:参数不足:应为1,但得到0用法:hadoop fs[通用选项]-put[-f][-p]@约翰多:我想你忘了像我一样分解指挥部。请仔细阅读我的答案并与您的代码进行比较。谢谢,错过了这一点,现在一切都正常了。我现在收到了以下错误:
FileNotFoundError:[Errno 2]没有这样的文件或目录:'/usr/local/hadoop-2.5.1/bin/hadoop fs-put'
,但它确实存在:(venv)bash-4.1#/usr/local/hadoop-2.5.1/bin/hadoop fs-put-put:参数不足:应为1,但得到0用法:hadoop fs[通用选项]-put[-f][-p]@约翰多:我想你忘了像我一样分解指挥部。请仔细阅读我的答案,并与您的代码进行比较。谢谢,错过了这一点,现在一切都正常