我试图通过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;部分。
由于
答案 0 :(得分:1)
您必须让Python通过完整的shell运行此行,而不是尝试将其作为命令运行。您可以通过添加shell=True
选项而不拆分命令来实现。但如果命令的任何部分可能受到用户的影响(巨大的安全风险),那么你真的不应该这样做。
您可以通过先调用wc
,获取结果然后调用split
,以更安全的方式执行此操作。或者甚至用纯Python实现整个事情,而不是调用其他命令。
现在发生的事情是,您使用第一个参数split
,第二个参数-l$((``wc
等来调用-l
。