通过调用命令行函数在python中拆分大文件

时间:2014-08-26 19:12:38

标签: python python-2.7 python-3.x

我试图通过python脚本将文件拆分成多个部分:

这是我的代码:

def bashCommandFunc(commandToRun):
    process     = subprocess.Popen(commandToRun.split(), stdout=subprocess.PIPE)    
    output      = process.communicate()  
    return output


filepath = "/Users/user/Desktop/TempDel/part-00000"
numParts = "5"

splitCommand = "split -l$((`wc -l < " + filepath + "/" + numParts + ")) " + filepath 


splitCommand:
'split -l$((`wc -l < /Users/user/Desktop/TempDel/part-00000`/5)) /Users/user/Desktop/TempDel/part-00000'

如果我在终端上运行此命令,它会按原样拆分文件,但是对于上面定义的子进程函数它会失败。

我已经测试了其他通用命令的功能,它运行正常。

我相信角色&#34; `&#34; (代字号)可能是一个问题,

使此命令起作用的工作是什么? 有没有更好的方法将文件从python拆分为&#34; n&#34;部分。

由于

1 个答案:

答案 0 :(得分:1)

您必须让Python通过完整的shell运行此行,而不是尝试将其作为命令运行。您可以通过添加shell=True选项而不拆分命令来实现。但如果命令的任何部分可能受到用户的影响(巨大的安全风险),那么你真的不应该这样做。

您可以通过先调用wc,获取结果然后调用split,以更安全的方式执行此操作。或者甚至用纯Python实现整个事情,而不是调用其他命令。

现在发生的事情是,您使用第一个参数split,第二个参数-l$((``wc等来调用-l