问题描述
免责声明:刚开始学习python时,请原谅我一些笨拙的问题或解释。
EDIT-我只是解决了我遇到的核心问题,例如:
def to():
print('To...')
data = ' '.join(req(urls))
p2 = subprocess.run(['bash-tool'],text=True,capture_output=True,input=data)
p3 = subprocess.run(["another-tool"],input=p2.stdout)
with open(test + '-check','w') as f:
subprocess.run(['sort','-u'],stdout=f,input=p3.stdout)
another-func()
不确定这是否是正确的方法。正如我认为的那样,如果有大量的URL(> 10k),它就会崩溃。而且可能会很慢吗?
我要实现什么目标?
要请求一些url(以快速异步方式或使用线程/多处理),请保存响应,对其中的某些内容进行grep,然后将其保存到文本文件中。可以使用bash轻松完成,但是我希望它可以扩展以用于将来的添加和学习python,python网络和多线程/处理的概念。
问题:
import subprocess
from multiprocessing.dummy import Pool as ThreadPool
def req(urls):
print('\nRequesting...')
results = pool.map(requests.get,urls)
return [(result.text) for result in results]
我想将结果(或精确地说是管道)或返回值传递给另一个函数,该函数具有对bash命令/工具的子进程调用。(类似echo 'abc' | bash-tool | another-tool | sort -u >> out.txt
:
def to():
print('To...')
<Cat the return value here and pass it to below subprocesses>
p2 = subprocess.run(['bash-tool'],input=p1.stdout)
p3 = subprocess.run(["another-tool"],input=p3.stdout)
another-func()
因此整个程序将类似于:
import os
import argparse
from multiprocessing.dummy import Pool as ThreadPool
import subprocess
import requests
def req(urls):
print('\nRequesting...')
results = pool.map(requests.get,urls)
return [(result.text) for result in results]
def to():
print('To...')
<Cat the return value here and pass it to below subprocesses>
p2 = subprocess.run(['bash-tool'],input=p3.stdout)
another-func()
def another-func():
<Some more bash-fu>
def main():
with open(dom,'r') as fl:
urls=fl.read().splitlines()
req(urls)
if __name__ == '__main__':
pool = ThreadPool(int(threads))
main()
我可以将req()的返回值存储到To()中的变量中,例如data = req(urls)
,但是如何echo
permit
的值要使用子进程通过管道传递?
也请让我知道我是否正在以某种不好的逻辑接近它?任何帮助将不胜感激!
解决方法
暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!
如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。
小编邮箱:dio#foxmail.com (将#修改为@)