强制终端命令返回代码“坏”(不是0)?


8

我有一个用python编写的框架,出于测试目的,我基本上想做一个子进程(又称shell调用)……应该简单地返回RC!= 0。或运行“退出1”;但是由于某种原因,这些文件已翻译为FileNotFoundError。

因此,我还能做些什么来触发返回代码!= 0(以“可靠”的方式;这意味着该命令不应在将来的某个时间点突然返回0)。

我以为“搜索”一个称为退出的二进制文件,但是:

> /usr/bin/env exit
/usr/bin/env: exit: No such file or directory

1
exit 1是面向未来的方法。FileNotFoundError必须由其他原因引起。
Jos 2015年

当我执行“哪个出口”时...什么也没找到。因此,我假设“退出”是一个bash函数;进行子流程调用时可能不可用?
GhostCat 2015年

技术上的挑剔:您的问题似乎暗示着,非零返回码并不表示存在不良情况。“ 0”表示“没有错”只是一个约定问题。实际上,您有8位信息可以传递回调用过程。
2015年

@乔斯我明白。但是关键是RC!= 0导致subprocess.check_call()中的特定异常。我要强制执行该条件以确保正确处理该条件(以确保按实际情况处理真实测试中的任何RC!= 0情况)。
GhostCat 2015年

2
怎么/bin/false
steeldriver

Answers:


18

如果您正在寻找一个总是返回非零退出代码的系统命令,那么/bin/false它似乎应该对您有用。来自man false

NAME
       false - do nothing, unsuccessfully

SYNOPSIS
       false [ignored command line arguments]
       false OPTION

DESCRIPTION
       Exit with a status code indicating failure.

不,不是的。至少在运行bash的Ubuntu 16.04.4上,以下命令行给出1而不是5:/bin/false 5; echo $?
fviktor

@fviktor,它以非零状态退出-如大纲所述,命令行参数(例如5)将被忽略
Steeldriver

你是对的。只是没有办法控制实际的非零退出代码。
fviktor

7

您可以使用命令创建新的返回码bash -c "exit RETURNCODE",将“ RETURNCODE”替换为任何数字。请注意,它将被(RETURNCODE mod 256)修剪为8位无符号整数(0 ... 255)

您可以查看最后shell命令的返回码的终端内部(!)与执行echo $?。“ $?” 变量包含最新的返回码,“ echo”将其输出到标准输出。


+1。请注意,如果您是使用Shell脚本编写此代码,则可以exit RETURNCODEbash -c
Matt Browne

0

经过更多测试后,我发现我的问题不在“ Linux”方面。

Python有一个模块shlex;应该用来“分割”命令字符串。当我更改子流程调用以使用shlex.split()调用“ bash exit 1” 的输出时,便得到了我所需要的。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.