python - 从 bash 脚本重定向时,比较变量与字符串 python 不起作用

标签 python bash shell

首先,我将向您展示 bash 和 python 脚本(两者都位于我的 Mac 上的 /bin 目录中):

bash 脚本 (esh_1):

#! /bin/bash

echo -n "Enter bash or natural-language command: "
read INPUT
echo $INPUT > ~/USER_INPUT.txt
$INPUT
if (( $? )); then echo Redirected to Python Script; esh_2; cat ~/USER_INPUT.txt; else echo Did not redirect to Python Script;  fi
esh_1

Python 脚本 (esh_2):

#! /usr/bin/python2.7

with open('/Users/bendowling/USER_INPUT.txt', 'r') as UserInputFile:
    UserInput = UserInputFile.read()

UserInputFile = open('/Users/bendowling/USER_INPUT.txt', 'w+')

if UserInput == 'List contents':
    UserInputFile.write("ls")
else:
    print "Didn't work"

UserInputFile.close()

bash 脚本获取用户的输入,将其存储在名为 USER_INPUT.txt 的临时文件中,并检查其是否正确运行。如果没有,它会调用 esh_2(Python 脚本)来读取 USER_INPUT.txt 文件,获取用户的输入。然后它检查它是否等于字符串“List content”。如果是,则将 "ls" 写入文本文件。然后它关闭该文件。然后 bash 文件捕获存储在文本文件中的命令(将来我将使其作为命令运行)。然后脚本再次开始。

问题是,当我在 shell 中输入“List content”时,它不起作用,因此打印“Didn't work”。但是,如果我自己进入文本文件并写入 "List content",Python 脚本就会工作并将 "ls" 写入文本文件。我不知道为什么会发生这种情况。我很高兴在此事上得到任何帮助。

谢谢, b3n

最佳答案

当您read()文件时,您可能会在字符串中得到一个换行符'\n'。尝试一下

if UserInput.strip() == 'List contents':

if 'List contents' in UserInput:

另请注意,您的第二个文件open也可以使用with:

with open('/Users/.../USER_INPUT.txt', 'w+') as UserInputFile:
    if UserInput.strip() == 'List contents': # or if s in f:
        UserInputFile.write("ls")
    else:
        print "Didn't work"

关于python - 从 bash 脚本重定向时,比较变量与字符串 python 不起作用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20864037/

相关文章:

python - 如何在Python中使用刷新 token Google API?

bash - 在 bash 中获取像 200 这样的 Curl 返回代码

bash - Sublime Text 2 - OS X 命令行

linux - 在 Linux shell 中读取文本并将某些特定行写入新文件

windows - 将shell函数移植到cmd.exe : Is it possible to automatically source scripts on startup?

Linux shell : why zero ending line dont work as expected?

python - 如何使用 python pandas 通过多索引获取值?

python - 直接在命令行写python脚本

python - 让seaborn条形图中的颜色与轴中的标签相匹配

arrays - Bash:有没有一种方法可以轻松地将大数组分成较小的数组?