如何通过使用bash脚本传递参数来运行python文件?

时间:2019-03-04 08:47:15

标签: python bash

我对bash脚本非常陌生。 我有一个.txt文件,其字符串名称由行分隔(每个字符串之间都有空格)。

my.txt是:

my name 
my class
my room

当我使用终端运行python脚本时。我需要一个个传递参数。

python3 python_file.py -f 'my name'
python3 python_file.py -f 'my class'
python3 python_file.py -f 'my room'

工作正常。我想对每个字符串(我的名字,我的班级和我的房间)分别使用bash脚本,并将其作为python脚本的参数传递。

#!/bin/bash
while read LINE; do
    #echo ${LINE}
    python3 pythonfile.py -f $LINE 
done < my.txt

它不起作用,因为每个字符串之间都有一个空格(我的名字),python假定为字符串并显示错误消息

error: unrecognized arguments: name

当我试图在bash脚本中加上引号时,它不起作用。

#!/bin/bash
while read LINE; do
    echo \'${LINE}\'
    #python3 pythonfile.py -f $LINE 
done < my.txt 

output:
'my name
'my class
'my room

具有相同的错误消息。

当我尝试在.txt文件中加上引号时,它甚至不起作用。

新:my.txt

'my name'
'my class'
'my room'

相同的错误消息:

error: unrecognized arguments: name

我不想通过从my.txt文件中逐个读取名称来使用一个python脚本来执行此操作。我在python脚本中有一些内部编码不适合此操作。因此,我想使用bash。

请指导。

2 个答案:

答案 0 :(得分:1)

运行此shell脚本时,我的Mac似乎提供了预期的输出:

#!/bin/bash
while read LINE; do
    echo python3 pythonfile.py -f \'${LINE}\'
    #python3 pythonfile.py -f $LINE
done < my.txt

注意到您在输出中没有看到最后的引号,也没有从输入中去除任何内容,我怀疑您的数据文件是在Windows环境中生成的,并且每行包含<CR><LF>个终止符

所以您的脚本在每行输入中输出的内容(shell剥去了终止换行符)是

'some name<CR>'<LF>

回车的结果是在第一个报价上加上第二个报价,使它“消失”。通常有一个dos2unix或类似的实用程序可以帮助您转换此类数据文件。

答案 1 :(得分:0)

答案由Inian给出。无法接受该评论作为答案,因此请在此处发布。

应该是python3 pythonfile.py -f "$LINE"