python - 使用上下文管理器打开

标签 python

我一直在尝试编写一个函数,该函数将使用 POPEN 和上下文管理器来执行通过参数传递给它的命令。不幸的是,我无法让它工作。有人可以帮忙吗?

import os
import sys
import subprocess
import inspect    

def run_process(cmd_args):
    with subprocess.Popen(cmd_args, stdout=subprocess.PIPE) as proc:
        log.write(proc.stdout.read())

run_process("print('Hello')")

预期的输出是"Hello"。有人可以指出我哪里出错了吗?

最佳答案

如果您正在通过子进程运行 bash 命令,那么您所做的是正确的。

在“with ...”上下文管理器中,您所做的是从终端读取输出并将它们作为字节存储在“output”变量中,并尝试在解码后以 ASCII 打印字节

尝试从上下文管理器返回值,然后在调用函数中对其进行解码:

import os
import sys
import subprocess
import inspect    

def run_process(cmd_args):          # Below added shell=True' in parameters.
    with subprocess.Popen(cmd_args, stdout=subprocess.PIPE, shell=True) as proc: 
        return proc.stdout.read()  # returns the output 
                               # Optionally you can use the 'encoding='utf-8' argument 
                               # instead and just print(proc.stdout.read()).   
print(run_process().decode('utf-8')) 

我在将进程流水线化到另一个程序时遇到了类似的问题,我在另一个程序中进行了解码,令人惊讶的是它起作用了。希望它也适用于您。

关于python - 使用上下文管理器打开,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52142357/

相关文章:

python - 如何将命令行参数传递给在 vscode 中运行的 pytest 测试

python - 正则表达式检测列表中的专有名词

javascript - 从 Summernote 中删除 Arial 和 Helvetica 字体

python: 在 cygwin 上使用 ctypes 时出现 sigsegv

python - 不永久保存环境

python - django urls.py 无法处理 url

python - 为最短路径提供与图中其余路径不同的颜色

python - 当 Set 中的对象被更改以相互匹配时会发生什么?

python - Django 管理页面未显示

python - 无法使用 python 将数据保存到 RaspberryPi 中的 MySQL 表中