Skip to main content
 首页 » 编程设计

python之子处理管道写入文件故障

2025年05月04日18itcoder

在 shell 中执行此命令可以获得切实的结果:

wget -O c1 --no-cache "http://some.website" | sed "1,259d" c1 | sed "4,2002d" 

在 Python 中这样做对我没有任何帮助:

subprocess.call(shlex.split("wget -O c1 --no-cache \"http://some.website/tofile\"")) 
c1 = open("c1",'w') 
first = subprocess.Popen(shlex.split("sed \"1,259d\" c1"), stdout=subprocess.PIPE) 
 
subprocess.Popen(shlex.split("sed \"4,2002d\""), stdin=first.stdout, stdout=c1) 
c1.close() 

这样做也没有结果:

c1.write(subprocess.Popen(shlex.split("sed \"4,2002d\""), stdin=first.stdout, stdout=subprocess.PIPE).communicate()[0]) 

我所说的“什么都没有”是指文件中的空白输出。有没有人在这里看到任何不寻常的地方?

请您参考如下方法:

我总是使用 plumbum用于运行外部命令。它提供了一个非常直观的界面,当然,它会帮我转义。

看起来像:

from plumbum.cmd import wget, sed 
cmd1 = wget['-O', 'c1']['--no-cache']["http://some.website"] 
cmd2 = sed["1,259d"]['c1'] | sed["4,2002d"] 
print cmd1 
cmd1()  # run it 
print cmd2 
cmd2()  # run it