管道结果从子进程到 unix 排序
Pipe result from subprocess to unix sort
我在 python 的外部 txt 文件上调用 perl 脚本,并将输出打印到输出文件。但是相反,我想将输出通过管道传递给 unix 的排序。现在我不是管道,而是先写 perl 程序的输出,然后结合我的代码,和 this Whosebug answer。
import subprocess
import sys
import os
for file in os.listdir("."):
with open(file + ".out", 'w') as outfile:
p = subprocess.Popen(["perl", "pydyn.pl", file], stdout=outfile)
p.wait()
只需使用bash。使用 python 只会增加您不需要的复杂程度。
for file in $( ls);
do
perl pydyn.pl $file | sort
done
以上是一个简单粗暴的例子,在解析方面更好的替代方法如下:
ls | while read file; do perl pydyn.pl "$file" | sort; done
既然你在 python 中提出了问题,你也可以通过管道传递结果
p = subprocess.Popen("perl pydyn.pl %s | sort" % file, stdout=outfile,shell=True)
但是为此你必须做到这一点 shell=True
这不是一个好的做法
这是一种没有成功的方法shell=True
p = subprocess.Popen(["perl", "pydyn.pl", file], stdout=subprocess.PIPE)
output = subprocess.check_output(['sort'], stdin=p.stdout,stdout=outfile)
p.wait()
要模拟 shell 管道:
#!/usr/bin/env python
import pipes
import subprocess
pipeline = "perl pydyn.pl {f} | sort >{f}.out".format(f=pipes.quote(filename))
subprocess.check_call(pipeline, shell=True)
不调用 Python 中的 shell:
#!/usr/bin/env python
from subprocess import Popen, PIPE
perl = Popen(['perl', 'pydyn.pl', filename], stdout=PIPE)
with perl.stdout, open(filename+'.out', 'wb', 0) as outfile:
sort = Popen(['sort'], stdin=perl.stdout, stdout=outfile)
perl.wait() # wait for perl to finish
rc = sort.wait() # wait for `sort`, get exit status
我在 python 的外部 txt 文件上调用 perl 脚本,并将输出打印到输出文件。但是相反,我想将输出通过管道传递给 unix 的排序。现在我不是管道,而是先写 perl 程序的输出,然后结合我的代码,和 this Whosebug answer。
import subprocess
import sys
import os
for file in os.listdir("."):
with open(file + ".out", 'w') as outfile:
p = subprocess.Popen(["perl", "pydyn.pl", file], stdout=outfile)
p.wait()
只需使用bash。使用 python 只会增加您不需要的复杂程度。
for file in $( ls);
do
perl pydyn.pl $file | sort
done
以上是一个简单粗暴的例子,在解析方面更好的替代方法如下:
ls | while read file; do perl pydyn.pl "$file" | sort; done
既然你在 python 中提出了问题,你也可以通过管道传递结果
p = subprocess.Popen("perl pydyn.pl %s | sort" % file, stdout=outfile,shell=True)
但是为此你必须做到这一点 shell=True
这不是一个好的做法
这是一种没有成功的方法shell=True
p = subprocess.Popen(["perl", "pydyn.pl", file], stdout=subprocess.PIPE)
output = subprocess.check_output(['sort'], stdin=p.stdout,stdout=outfile)
p.wait()
要模拟 shell 管道:
#!/usr/bin/env python
import pipes
import subprocess
pipeline = "perl pydyn.pl {f} | sort >{f}.out".format(f=pipes.quote(filename))
subprocess.check_call(pipeline, shell=True)
不调用 Python 中的 shell:
#!/usr/bin/env python
from subprocess import Popen, PIPE
perl = Popen(['perl', 'pydyn.pl', filename], stdout=PIPE)
with perl.stdout, open(filename+'.out', 'wb', 0) as outfile:
sort = Popen(['sort'], stdin=perl.stdout, stdout=outfile)
perl.wait() # wait for perl to finish
rc = sort.wait() # wait for `sort`, get exit status