2017-01-26 2 views
1

У меня следующая ситуация:Как правильно обрабатывать входной аргумент скрипта python при использовании параллели?

Мой скрипт (скажем, script.py) принимает аргумент в качестве ввода. У меня есть .txt-файл с последовательностью возможных входов (каждый вход представляет собой строку, представляющую идентификатор).

в сценарии я что-то вроде этого

#!/usr/bin/python             

import sys 

def doStuff(ID): 

     ID = str(ID) 
     path = ID + "/posts?" 

     print "\n\n\t"+path 
     foo = ID + "hello" 
     print foo 
     print ID+"hello" 
     sys.exit(0) 

inputID =sys.argv[1] 
print "Input ID\t-\t" + str(inputID) 
doStuff(inputID) 

если я запускаю код с

python script.py 123456789 

я правильно получить

 Input ID - 123456789 
     123456789/posts? 
     123456789hello 
     123456789hello 

, но если я что-то вроде

cat IDs.txt | parallel python script.py {} 

я

Input ID - 123456789 
/posts? 123456789 
hello6789 
hello6789 

, что здесь происходит? когда я конкатенация строк заказ вернулся, причем в двух последних печатает inputID переписываются «привет»

+0

Посмотрите в модуль FileInput, это позволяет принимать данные из водопроводного Stdout линий: https://docs.python.org/ 2/library/fileinput.html –

+0

Кажется полезным, если я должен прочитать файл внутри скрипта python IPT. В моем случае вместо ввода сценария python просто строка. – user2614596

ответ

0

Я думаю, что ваш файл .txt имеет \ г в нем, потому что это именно то, что вы видите:

printf '123456789\r\n' | parallel python script.py 

Удалить \ г из текстового файла или пусть GNU Parallel сделать это:

printf '123456789\r\n' | parallel python script.py '{= s/\r// =}' 
Смежные вопросы