2017-01-26 5 views
1

私は次のような状況に陥っています:並列を使用しているときにPythonスクリプトの入力引数を正しく処理する方法は?

私のスクリプト(たとえばscript.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クラスモジュールに見て、これはあなたがパイプで連結された標準出力ラインからのデータを受け入れることができます:https://docs.python.org/ 2/library/fileinput.html –

+0

python scrの中でファイルを読み込むと便利ですipt。私の場合、代わりにpythonスクリプトの入力は単なる文字列です。 – user2614596

答えて

0

「ハロー」で上書きされ、最後の2枚のプリントで、元に戻される私は、これはあなたが見るまさにんので、あなたの.txtファイルは、それに\ rとしていると思う:

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

テキストファイルから\ rを削除するか、GNUパラレルにそれをやらせる:

printf '123456789\r\n' | parallel python script.py '{= s/\r// =}' 
関連する問題