我有一个文件“BatchLink.txt”,其中包含新行中的网址。我想按行读取这些行并将参数按行传递给批处理脚本。
假设我的batchlink.txt包含以下数据: -
http://link1
http://link2
http://link3
http://link4
现在,我想逐行阅读,并将其一次发送到一个批处理文件。这个问题是我上一个问题Here的延续。 现在,我有这个代码: -
import requests
from bs4 import BeautifulSoup
import subprocess
file = open("BatchLinks.txt", "w")
r = requests.get('http://www.crunchyroll.com/i-cant-understand-what-my-husband-is-saying')
soup = BeautifulSoup(r.text)
print soup.title
subtitles = soup.findAll('div',{'class':'wrapper container-shadow hover-classes'})
for episode in subtitles:
x = episode.find_all('a')
for a in x:
#print a['href']
z = a['href']
l = 'http://www.crunchyroll.com'+ z
print l
file.write(l+'\n')
print '-----------------------------------------------------------------------------'
file.close()
file = open('BatchLinks.txt', "r")
lines = file.readlines()
print lines
if __name__ =="__main__":
response = lines
print(lines)
p = subprocess.Popen("_start.bat", stdin = subprocess.PIPE)
time.sleep(1)
p.stdin.write(response) #Answer the question
time.sleep(20)
但是,现在,问题是它同时读取行并将其发送到批处理文件。它返回输出[]
。我似乎无法让它工作。任何帮助/指导将不胜感激。
答案 0 :(得分:2)
file = open('BatchLinks.txt', "r")
lines = file.readlines()
将其更改为更新版本:
with open('BatchLinks.txt', "r") as inf:
for line in inf:
do something with line
答案 1 :(得分:0)
file = open('BatchLinks.txt', "r")
lines = file.readlines()
将其更改为更新版本:
with open('BatchLinks.txt', "r") as inf:
for line in inf:
do something with line
这是非常基本的东西。使用手册! https://docs.python.org/2/library/stdtypes.html#file-objects
答案 2 :(得分:0)
当你执行 - lines = file.readlines()
时 - 它会读取文件中的所有行并将其作为列表返回,因此lines
是文件中所有行的列表。
然后你正在做 - p.stdin.write(response)
- 这会将完整列表发送到另一个进程,你应该遍历lines
并将每一行发送到一个新进程。
示例 -
if __name__ =="__main__":
for line in lines:
print(line)
p = subprocess.Popen("_start.bat", stdin = subprocess.PIPE)
time.sleep(1)
p.stdin.write(line.strip())
time.sleep(20)
答案 3 :(得分:0)
我看到两个问题:您需要逐行写入管道,并且需要在完成后关闭管道。
替换以下行:
p.stdin.write(response) #Answer the question
这一个:
for line in response:
p.stdin.write(line)
p.stdin.close()