未检测到Python subprocess.call参数
我有一个脚本,它使用Hadoop CLI将文件上传到HDFS 以下是片段:未检测到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) 下面是我得到的(注意参数不
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]@约翰多:我想你忘了像我一样分解指挥部。请仔细阅读我的答案,并与您的代码进行比较。谢谢,错过了这一点,现在一切都正常