Python匹配单词后调用shell脚本传参打印的报错修复方案
问题根因
报错和功能不生效来自两个独立问题:
- Shell脚本存在语法错误:Bash的
if/elif/else条件结构必须用fi关键字标记结束,你的脚本漏写了fi,解析器读到文件末尾都没找到结构闭合标记,就抛出了unexpected end of file错误。另外脚本里读取的是$2(第二个输入参数),但调用时根本没传参,就算语法正确也拿不到匹配到的单词。 - Python调用脚本时没有传递匹配结果:你写的
os.system调用只执行了脚本本身,没有把当前匹配到的word作为参数传给脚本,Shell端自然无法识别匹配到的内容。
修复方案
- 先给Shell脚本加可执行权限,终端执行命令:
chmod +x /home/raed/Desktop/1.sh - 修正Shell脚本,补全语法结构,读取传入的匹配词参数。你当前三个分支的执行逻辑完全一致,不需要保留冗余的条件判断,最简正确版本如下:
#!/bin/bash matched_word="$1" echo "This is '${matched_word}'" exit 0
如果需要保留原条件分支结构,注意补上fi闭合标记,同时把参数引用从$2改成对应传入位置的$1:
#!/bin/bash ######################## if [ "$1" = "pear" ]; then echo " This is '$1'" elif [ "$1" = "apple" ]; then echo " This is '$1'" else echo " This is '$1'" fi exit 0
- 修正Python代码中调用Shell的逻辑,把匹配到的单词作为参数拼接在执行命令后传入脚本:
import os # 待匹配词表 matching_words = ["apple", "pear", "car", "house"] # 获取用户输入 user_string = input("Please enter some text:") # 遍历词表匹配 for word in matching_words: if word in user_string: print("\n{} is in the user string\n\n".format(word)) # 将匹配到的词作为参数传入Shell脚本 os.system(f'/home/raed/Desktop/1.sh {word}')
修复后运行程序,输入包含词表内单词的文本时,Shell脚本就能正确接收到匹配到的单词并打印。
内容的提问来源于stack exchange,提问作者user18418127
相关产品推荐
相关产品推荐

