我正在尝试自动研究我所拥有的域列表(此列表是.txt文件,大约350/400行)。 我需要为txt文件中的每一行提供相同的命令(使用py脚本)。这样的事情:
import os
with open('/home/dogher/Desktop/copia.txt') as f:
for line in f:
process(line)
os.system("/home/dogher/Desktop/theHarvester-master/theHarvester.py -d "(line)" -l 300 -b google -f "(line)".html")
我知道“os.system”语法错误但我不知道如何在行中插入文本到命令中。 非常感谢,抱歉英语不好..
答案 0 :(得分:1)
import os
with open('data.txt') as f:
for line in f:
os.system('python other.py ' + line)
如果other.py
的内容如下:
import sys
print sys.argv[1]
然后第一个代码段的输出将是data.txt
的内容
我希望这是你想要的,而不是简单地通过print
打印,你也可以process
你的行。
答案 1 :(得分:0)
你的方法使你的文件的每一行都受到shell的评估,这会破坏它(如果它)遇到任何对shell具有特殊含义的字符的行时(空格,引号,括号,&符号),即使今天的输入文件不包含任何此类字符,您的下一个项目也将如此。所以今天要学会正确地做到这一点:
for line in openfile:
subprocess.call("/home/dogher/Desktop/theHarvester-master/theHarvester.py",
"-d", line, "-l", "300", "-b", "google", "-f", line+".html")
由于不需要解析命令行参数,subprocess
将执行您的命令而不涉及shell。
答案 2 :(得分:0)
由于Linux标签,我建议你使用bash
做你想做的事process_file.sh:
#!/bin/bash
#your input file
input=my_file.txt
#your python script
py_script=script.py
# use each line of the file `input` as argument of your script
while read line
do
python $py_script $line
done < "$input"
您可以按如下方式访问python中传递的行:
script.py:
import sys
print sys.argv[1]
答案 3 :(得分:0)
希望以下解决方案对您有所帮助:
with open('name.txt') as fp:
for line in fp:
subprocess.check_output('python name.py {}'.format(line), shell=True)
我使用的示例文件:
name.py
import sys
name = sys.argv[1]
print name
name.txt:
harry
kat
patrick