我无法找到使用 linuxsort命令作为 python 脚本输入的解决方案。
例如我想迭代结果sort -mk1 <(cat file1.txt) <(cat file2.txt))
通常我会使用andPopen迭代它,例如:nextstdout.readline()
import os
import subprocess
class Reader():
def __init__(self):
self.proc = subprocess.Popen(['sort -mk1', '<(', 'cat file1.txt', ')', '<(', 'cat file2.txt', ')'], stdout=subprocess.PIPE)
def __iter__(self):
return self
def __next__(self):
while True:
line = self.proc.stdout.readline()
if not line:
raise StopIteration
return line
p = Reader()
for line in p:
# only print certain lines based on some filter
有了上面的内容,我会得到一个错误:No such file or directory: 'sort -mk1'
经过一些研究后,我想我不能使用 Popen,而必须使用os.execl来利用bin/bash
所以现在我尝试以下:
import os
import subprocess
class Reader():
def __init__(self):
self.proc = os.execl('/bin/bash', '/bin/bash', '-c', 'set -o pipefail; sort -mk1 <(cat file1.txt) <(cat file2.txt)')
def __iter__(self):
return self
def __next__(self):
while True:
line = self.proc.stdout.readline()
if not line:
raise StopIteration
return line
p = Reader()
for line in p:
# only print certain lines based on some filter
问题在于它实际上立即打印了所有行。我想一种解决方案是将其结果通过管道传输到一个文件,然后在 python 中迭代该文件。但我真的不想将其保存到文件中然后对其进行过滤,似乎没有必要。是的,我可以使用其他 linux 命令,例如awk,但我想使用 python 进行进一步处理。
所以问题是:
有没有一种方法可以使解决方案一并Popen
发挥作用?
如何迭代sort
使用第二个解决方案的输出?
慕容3067478
芜湖不芜
拉丁的传说
相关分类