如何在使用并行时正确处理python脚本的输入参数?

时间:2017-01-26 11:48:26

标签: python parallel-processing gnu-parallel

我有以下情况:

我的脚本(比如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被"你好"

覆盖

1 个答案:

答案 0 :(得分:0)

我认为您的.txt文件中有\ r \ n,因为这完全符合您的要求:

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

从文本文件中删除\ r或让GNU Parallel执行:

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