使用Python调用Bash脚本时为什么返回256

玛莎莎41

我有一个简单的bash脚本

check_repo() {
    if cat /etc/apt/sources.list | grep "deb https://http.kali.org/kali kali-rolling main contrib non-free" || cat /etc/apt/sources.list | grep "deb https://http.kali.org/kali kali-rolling main non-free contrib"
    then
        return 0
    else
        return 1
    fi
}

check_repo

这个脚本检查sources.list文件是否存在一个特定的回购,然后返回0,如果不存在,则返回1,但是当我使用python3调用脚本check = os.system("bash myscript.sh")但是当我打印变量“ check”时可打印256

为什么会给出输出?我该如何解决?

  • 操作系统:Kali Linux
  • 内核:x86_64 Linux 5.9.0-kali4-amd64
  • 壳牌:bash 5.1.0

提前谢谢你的回答

三元组

这就是os.system()回报;在类Unix系统上,高8位是结果代码,低8位是信号(如果没有信号,则为0)。

在Python中执行此操作的正确方法是

check = False
with open("/etc/apt/sources.list") as repo:
    for line in repo:
        if "deb https://http.kali.org/kali kali-rolling main contrib non-free" \
            in line or "deb https://http.kali.org/kali kali-rolling main non-free contrib" \
                in line:
           check = True
           break

在shell脚本中执行此操作的正确方法是

if grep -q -e "deb https://http\.kali\.org/kali kali-rolling main contrib non-free" -e "deb https://http\.kali\.org/kali kali-rolling main non-free contrib" /etc/apt/sources.list
then ...

(或重构为grep -E与单个正则表达式一起使用以覆盖两个表达式;请参见下文,以进行尝试)。

如果要将其放在函数中,则从的退出状态grep将为0或1,因此return除此以外无需另外进行任何操作。

从Python脚本调用此代码的正确方法是

import subprocess

check = subprocess.check_call(['grep', '-q', '-E',
        r'deb https://http\.kali\.org/kali kali-rolling main( contrib| non-free){2}',
        '/etc/apt/sources.list'])

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

生成bash脚本时,Expect脚本返回错误。为什么?

调用此Bash脚本时,为什么文件参数必须使用引号?

从PHP控制器使用request.post()调用python脚本永远不会返回。为什么?

使用-m运行python脚本时,为什么不调用__init__.py?

通过os.system()调用Shell脚本的Python脚本退出代码为256,而不是1。为什么?

为什么“系统”的返回与所调用脚本的返回不匹配?

当脚本文件来自zsh时,为什么BASH_REMATCH返回空?

当使用 eval() 从 php 脚本调用脚本以及从 bash 脚本调用相同的函数时,python 如何使用路径?

使用 'watch' 的 Bash 脚本失败。为什么?

我有一个crontab条目,它调用bash脚本。为什么$ USER返回空白?

为什么从 MATLAB 调用此 python 脚本时无法正常工作?

使用参数从bash调用Python脚本

调用方法并将返回值赋给数组时,为什么C#在调用方法时使用数组引用?

为什么函数 getSafestCountriesNames() 在我调用它时返回 promise{pending} 而当我使用 async/await 时它返回 undefined?

使用AJAX调用删除对象时,为什么会返回2个响应200和204?

为什么dircolors不为从PHP调用的bash返回enything

为什么使用Python脚本调用jar文件后立即终止?

当我的函数返回 int 时,为什么 Remix 说返回 int256?

为什么在函数返回时不调用复制构造函数?

为什么返回父活动时总是调用onDestroy?

为什么字典在使用函数时返回 None ,而它在 Python 中返回我想要的函数

为什么我的 bash 脚本在使用 bash -x script.sh 启动时输出“+ '[' 0 -le 1 ']'”?

为什么在调用bash -c时源不起作用

Bash编程-仅当从另一个脚本调用脚本时才返回变量

当使用调用运算符的退出代码为非零时,为什么PowerShell脚本没有结束?

为什么在使用ansible时Python脚本的工作方式有所不同?

使用Perl执行Python脚本时,为什么没有语法错误?

从bash脚本调用awk脚本时出错

使用Google表格脚本,为什么我的if语句在比较单元格值时总是返回false?