使用Tr命令的Python子流程

时间:2015-09-16 15:39:59

标签: python subprocess

我无法将tr命令插入子进程。

我有以下内容:

process = subprocess.Popen('"tr < " + inputFile + " -d '\000' > " + nullFile', shell=True, stdout=subprocess.PIPE)

但继续

TypeError: execv() arg 2 must contain only strings

有谁能看到最新情况?它看起来可能是&#39;和&#34;问题但不确定。

2 个答案:

答案 0 :(得分:1)

解决这个问题:

onActivityResult

答案 1 :(得分:0)

您不需要shell=True来调用tr命令:

#!/usr/bin/env python
from subprocess import check_call

with open('input', 'rb', 0) as input_file, \
     open('output', 'wb', 0) as output_file:
    check_call(['tr', '-d', r'\000'], stdin=input_file, stdout=output_file)

反斜杠在Python字符串文字中是特殊的,因此要传递反斜杠,您需要转义它:'\\000'或者您应该使用原始字符串文字:r'\000'

您不需要此处的外部流程。您可以使用纯Python从文件中删除零字节:

chunk_size = 1 << 15
with open('input', 'rb') as input_file, \
     open('output', 'wb') as output_file:
    while True:
        data = input_file.read(chunk_size)
        if not data: # EOF
            break
        output_file.write(data.replace(b'\0', b''))