在 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
关于python - 子处理管道写入文件故障,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15401836/