2017-01-26 60 views
1

我有followint的情況:如何在使用並行時正確處理python腳本的輸入參數?

我的腳本(比如腳本.py)需要一個參數作爲輸入。我有一個帶有一系列可能輸入的.txt文件(每個輸入都是一個代表ID的字符串)。

在腳本中我做這樣的事情

#!/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 scr內的文件IPT。在我的情況下,python腳本的輸入只是一個字符串。 – user2614596

回答

0

我覺得你的txt文件中有\ R,因爲這不正是你所看到的:

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

從文本文件中刪除\ R或讓GNU並行做到這一點:

printf '123456789\r\n' | parallel python script.py '{= s/\r// =}' 
相關問題