2016-01-25 2 views
0

У меня есть 3 файлов в общей сложности:. Clean.txt, origin.py и pump.pyПередача аргумента из одного питона сценария в другой

Clean.txt имеет несколько строк в нем (на самом деле сайте ссылки для например, :

www.link1.com 
www.link2.com 
www.link3.com 
www.link4.com 

origin.py это скрипт, который читает строки один за другим, и я хочу этот скрипт, чтобы отправить ссылку (по одному за раз), чтобы pump.py

pump.py представляет собой скрипт, который запрашивает у меня один вход, который является ссылкой.

Теперь я хочу сделать так, чтобы я читал строки из clean.txt (origin.py выполняет эту задачу) и отправлял их на pump.py по одному. Как петля. Код для Origin.py является:

fo = open("Clean.txt", "r") 
nremoval = str(fo.readlines()).replace('\\n','') 
     for lines in fo : 
      if __name__ =="__main__": 
      response = nremoval 
      p = subprocess.Popen("pump.py", stdin = subprocess.PIPE) 
      time.sleep(2) 
      p.stdin.write(bytes(response, 'ascii')) 
      print("injected string :", response) 
+0

что '' nremoval' и response'? почему вы пишете его вместо 'lines'? – furas

+0

обновил код, забыл добавить эту строку. 'nremoval' удаляет символ' \ n' из строк, из которых 'fo' читает. Я пробовал линии, это не сработало. Это даже не показывает никаких результатов для этого. – Xonshiz

+0

'readlines()' возвращает список и вы конвертируете этот список в одну строку - распечатайте его, чтобы увидеть, какую странную строку вы создали. Вы можете использовать 'lines = lines.strip()', чтобы получить одну строку без '\ n', а затем вы можете отправить ее на' pump.py' – furas

ответ

2

origin.py

import subprocess 
import time 

# open file 
with open("Clean.txt", "r") as fo: 

    # read line by line 
    for line in fo: 

     # remove ENTER and SPACES from single line 
     line = line.strip() 

     # call "python pump.py" 
     p = subprocess.Popen(["python","pump.py"], stdin=subprocess.PIPE) 

     # or "python3 pump.py" 
     #p = subprocess.Popen(["python3","pump.py"], stdin=subprocess.PIPE) 

     #time.sleep(2) 

     # send line to standard input 
     #p.stdin.write(bytes(line, 'ascii')) # python 3 
     p.stdin.write(line) # python 2 

     print("injected string:", line) 

pump.py

#line = input() # python 3 
line = raw_input() # python 2 

print("received:", line) 
+0

Я пробовал его код, но он отправляет все ссылки сразу. И, следовательно, это дает мне ошибку: http://i.imgur.com/jw0dhBn.png – Xonshiz

+0

Плюс мне пришлось удалить «python3», чтобы он работал. Я нахожусь на python 2.7, и он берет python3 как имя файла. Может быть, потому, что в python 3 из python многое изменилось. 0. – Xonshiz

+0

попробуйте использовать 'p.stdin.write (строка)' – furas

Смежные вопросы