Pythonsubprocess.call未检测到参数

2024-09-30 20:26:04 发布

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

我有一个脚本,可以使用hadoopcli将文件上载到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)

以下是我得到的结果(注意参数不是null):

^{pr2}$

Tags: 文件path脚本hadooptopicputusrlocal
2条回答

您误用了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:

^{pr2}$

shell=True时,args应该包含一个要在shell中运行的字符串。{1>你可以简单地删除你的命令:

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

我把它改为使用check_call,因为这是检查错误的简单方法。在

相关问题 更多 >