【问题标题】:How to run python file by passing argument using bash script?如何通过使用 bash 脚本传递参数来运行 python 文件?
【发布时间】:2019-03-04 08:47:14
【问题描述】:

我对 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。

请指导。

【问题讨论】:

  • 应该是python3 pythonfile.py -f "$LINE"
  • 你试过python3 pythonfile.py -f '$LINE' 吗?这应该有效。
  • @R.Joiny:这行不通,因为bash 中的变量不会在单引号下展开。你需要双引号
  • @Inian 非常感谢。它起作用了:D

标签: python bash


【解决方案1】:

当我运行这个 shell 脚本时,我的 Mac 似乎给出了预期的输出:

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

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

所以你的脚本输出的每一行输入(shell 去掉终止的换行符)是

'some name<CR>'<LF>

回车的作用是用第二个引号覆盖第一个引号,使其“消失”。通常有一个dos2unix 或类似的实用程序可以帮助您转换此类数据文件。

【讨论】:

  • 正如我所提到的,我是 bash 新手。是的,txt 文件是在 Windows 中准备的。在传递字符串(我的名字)时,它会将'my' 视为传递参数的字符串,并将'name' 视为第二个参数并显示错误unrecognized argumentpython3 pythonfile.py -f "$LINE"解决了这个问题。
  • 是的,了解不同的引用选项是学习过程的重要组成部分。
【解决方案2】:

答案由Inian给出。不能接受该评论作为答案,因此将其发布在这里。

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

【讨论】:

    猜你喜欢
    • 2014-12-25
    • 2014-07-31
    • 1970-01-01
    • 2021-10-31
    • 1970-01-01
    • 1970-01-01
    • 2015-05-13
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多