我一直在尝试编写一个函数,该函数将使用 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/