如何为txt文件中的每一行执行命令

时间:2017-06-10 08:47:48

标签: python linux

我正在尝试自动研究我所拥有的域列表(此列表是.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”语法错误但我不知道如何在行中插入文本到命令中。 非常感谢,抱歉英语不好..

4 个答案:

答案 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