- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我正在尝试使用 subprocess
从 Python 中运行 bandit
。我有一些这样的代码:
import subprocess
command = ['bandit', '-r', 'goodcode']
output = subprocess.check_output(command)
print(output.decode())
这工作正常,并给我一个像这样的字符串输出:
Run started:2016-09-27 10:37:17.567678
Test results:
No issues identified.
Code scanned:
Total lines of code: 940
Total lines skipped (#nosec): 0
Run metrics:
Total issues (by severity):
Undefined: 0
Low: 0
Medium: 0
High: 0
Total issues (by confidence):
Undefined: 0
Low: 0
Medium: 0
High: 0
Files skipped (0):
...但是,当我在 bandit
返回一些错误的目录上运行它时,bandit
进程本身返回 1。因此我必须捕获 >CalledProcessError
像这样:
import subprocess
command = ['bandit', '-r', 'badcode']
try:
output = subprocess.check_output(command)
except subprocess.CalledProcessError as e:
output = e.output
print(output.decode())
...这给了我以下结果:
b"Run started:2016-09-27 10:42:26.616123\n\nTest results:\n>> Issue: [B110:try_except_pass] Try, Except, Pass detected.\n Severity: Low Confidence: High\n Location: badcode/conf/settings_development.py:93\n92\t from .settings_local import *\n93\texcept:\n94\t pass\n\n--------------------------------------------------\n>> Issue: [B105:hardcoded_password_string] Possible hardcoded password: 'password'\n Severity: Low Confidence: Medium\n Location: badcode/frontend/tests/test_views.py:21\n20\t form['username'] = self.user.username\n21\t form['password'] = 'password'\n22\t\n\n--------------------------------------------------\n>> Issue: [B105:hardcoded_password_string] Possible hardcoded password: 'password'\n Severity: Low Confidence: Medium\n Location: badcode/frontend/tests/test_views.py:35\n34\t form['username'] = self.user.username\n35\t form['password'] = 'password'\n36\t\n\n--------------------------------------------------\n>> Issue: [B110:try_except_pass] Try, Except, Pass detected.\n Severity: Low Confidence: High\n Location: badcode/reasons/views.py:234\n233\t nr = subject.number\n234\t except:\n235\t pass\n\n--------------------------------------------------\n>> Issue: [B110:try_except_pass] Try, Except, Pass detected.\n Severity: Low Confidence: High\n Location: badcode/reasons/views.py:277\n276\t nr = event.number\n277\t except:\n278\t pass\n\n--------------------------------------------------\n>> Issue: [B110:try_except_pass] Try, Except, Pass detected.\n Severity: Low Confidence: High\n Location: badcode/retention/migrations/0010_auto_20160527_1603.py:13\n12\t retention.save()\n13\t except:\n14\t pass\n\n--------------------------------------------------\n>> Issue: [B110:try_except_pass] Try, Except, Pass detected.\n Severity: Low Confidence: High\n Location: badcode/retention/migrations/0015_auto_20160623_1051.py:13\n12\t retention.save()\n13\t except:\n14\t pass\n\n--------------------------------------------------\n>> Issue: [B108:hardcoded_tmp_directory] Probable insecure usage of temp file/directory.\n Severity: Medium Confidence: Medium\n Location: badcode/utils/views.py:322\n321\t css = '{}/static/badcode/css/screen.css'.format(settings.ROOT_DIR)\n322\t location = '/tmp/{}.pdf'.format(filename)\n323\t\n\n--------------------------------------------------\n\nCode scanned:\n\tTotal lines of code: 15287\n\tTotal lines skipped (#nosec): 0\n\nRun metrics:\n\tTotal issues (by severity):\n\t\tUndefined: 0.0\n\t\tLow: 7.0\n\t\tMedium: 1.0\n\t\tHigh: 0.0\n\tTotal issues (by confidence):\n\t\tUndefined: 0.0\n\t\tLow: 0.0\n\t\tMedium: 3.0\n\t\tHigh: 5.0\nFiles skipped (0):\n"
请注意,b""
位于字符串内部,因此 output[0] == 'b'
且 output[1] == '"'
。这是为什么?如果进程返回 0,e.output
不应该将输出编码为与 output
相同吗?
最佳答案
在第二种情况下调用 .decode()
方法之前,您似乎已经查看了 output
变量。 output
在两种情况下都引用相同的字节串。
>>> import subprocess, sys
>>> output1 = subprocess.check_output([sys.executable, '-c', 'print("abc")'])
>>> try:
... subprocess.check_output([sys.executable, '-c',
... 'print("abc"); import sys;sys.exit(1)'])
... except subprocess.CalledProcessError as e:
... output2 = e.output
...
>>> output1 == output2
True
如果非零退出状态在您的情况下不是错误,那么您可以使用在这种情况下不会引发 CalledProcessError 的函数:
#!/usr/bin/env python3
from subprocess import run, PIPE
finished_process = run(command, stdout=PIPE, universal_newlines=True)
print("{p.returncode}, {p.stdout}".format(p=finished_process))
# e.g.: 1, abc
universal_newlines=True
在这里是“启用文本模式”的晦涩拼写。
关于python - python3中CalledProcessError后的子进程输出,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39722660/
我有一个脚本循环遍历几个文件路径,以便使用子进程执行一些其他 python 和 bash 脚本。 我知道这些脚本偶尔会失败,我想捕获异常并停止循环/退出调用脚本。这看起来应该很简单 - 但我很想让它发
我正在使用 subprocess 模块和 check_output() 在我的 Python 脚本中创建一个虚拟 shell,它适用于返回零退出状态的命令,然而,对于那些不这样做的,它会返回一个异常,
我希望有人可以帮助解决这个问题。我正在尝试以以下动画的形式从 Keras 中保存损失图。 但我一直面临以下错误,最终我无法保存动画: MovieWriter stderr: [h264_v4l2m2m
我已经通过 brew 安装了 Cmake 并查看了错误跟踪器和其他有这个问题的人,但我没有找到任何有我问题的人。这是输出中的错误: Linking CXX shared library /Users/
我一直在使用一个执行 bash 命令的简短 python 脚本。该程序运行了大约一个月,效果良好。最近,我尝试运行脚本并向其传递以下命令: my_launcher.py -c /path/to/con
我使用 python,我想创建一个数据库源 Controller ,如 liquibase 。我找到liquibase调用的python版本 pyquibase 但得到 subprocess.Call
我正在使用下面的代码获取 shell 命令的输出。 import subprocess exitcode, err, out = 0, None, None try: out = subpro
import subprocess cmd = "grep -r * | grep jquery" print cmd subprocess.check_output(cmd, shell=True)
继续 from my previous question我看到要获取我在 python 中通过 Popen 生成的进程的错误代码,我必须调用 wait() 或 communicate() (可用于访问
我正在使用 python 子进程模块中的 subprocess.check_output 来执行 ping 命令。这是我的做法: output = subprocess.check_output(["
我想在python(3)脚本中捕获shell命令的stdout流,同时能够检查shell命令的返回码是否返回一个错误(也就是说,如果它的返回码不是 0)。 subprocess.check_outpu
运行时出现以下错误 buildozer android debug deploy run (VirtualBox 上的 Ubuntu 64 14.04): Traceback (most recent
在asyncio模块中是否有一个与CalledProcessError类似的东西?来自 subprocess 模块的异常? 我本来希望有一个模拟,因为 asyncio 模块创建 TimeoutErro
>>> import subprocess >>> subprocess.check_output("smartctl -d ata -a /dev/sda", shell=True) "output
在运行 kivy 时,出现此错误。我已经安装了 ant。 subprocess.CalledProcessError: Command '['ant', 'debug']' returned non-
我正在尝试实现以下代码: import os os.environ.update({'MALLET_HOME':r'c:/mallet-2.0.8/'}) mallet_path = 'C:\\mal
当我在约 1600 万个文档的完整语料库上运行 Gensim LDAMallet 模型时,出现 CalledProcessError“非零退出状态 1”错误。有趣的是,如果我在包含约 160,000
以下是我们代码库中的代码片段 # global library function def check_call_noout(params, acceptable_exit_codes = (0,),
我想调用一个子进程来备份mysql数据库。在终端中运行良好的命令行(并创建了一个名为 mydatabase.sql 的文件)是: mysqldump -uroot -ppassword --a
这个问题已经有答案了: Subprocess check_output returned non-zero exit status 1 (2 个回答) 已关闭 5 年前。 我需要计算 python 脚
我是一名优秀的程序员,十分优秀!