python - 在变量中捕获在终端中运行的命令的输出
问题描述
我正在尝试捕获从运行到变量中的 python 脚本中获得的所有数据。我在脚本中从用户那里获取了一些输入,我想从头到尾捕获所有内容。
它几乎与此类似:运行 shell 命令并捕获输出
但这再次使用脚本中的子进程来获取输出。
我想要的是这样的:
当我在终端中运行 ls -l 时,我希望我的脚本捕获 ls -l 的输出
如果我写:
p2 = subprocess.Popen('ls' ,'-l',stdout= subprocess.PIPE).communicate()[0])
在我的脚本中,这将执行脚本两次。
当我在终端中运行 ls -l 以在 p2 中捕获时,预期的输出是捕获所有数据。
解决方案
您可以使用pexpect
轻松打开 PTY 并记录它显示的所有内容:
#!/usr/bin/env python3
import pexpect
import io
print("-- Running the program")
p = pexpect.spawn("./foo.py")
p.logfile_read = io.BytesIO()
p.interact();
print("-- Program exited. Here is the log:")
log = p.logfile_read.getvalue().decode("utf-8")
print(log)
这是一个foo.py
:
#!/usr/bin/env python3
name=input("Enter name: ")
print("Hello " + name)
从终端运行它时会发生以下情况:
$ ./foo.py
Enter name: World
Hello World
当您从日志记录脚本运行它时,会发生以下情况:
$ ./log.py
-- Running the program
Enter name: World
Hello World
-- Program exited. Here is the log:
Enter name: World
Hello World
推荐阅读
- javascript - 在闪亮中更改 dygraph 的交互模型
- java - 从执行命令行多行程序获取输出
- angular - Angular 7 两次调用 asp.net webapi
- javascript - How to count number of values in array?
- node.js - 将节点版本从 v6.10 升级到 v10.x 后捆绑项目的差异
- powerbi - 基于断开连接的切片器计算的列
- python - 如何在 dag 模板中的任务函数上使用装饰器
- python - 如何对 pandas.DataFrame 上的 apply + filter 操作进行矢量化?
- cassandra - IBM DataStage 将数据加载到 Apache cassandra 引发 TransportException
- python - 使用 cloud9 在 python 中调用模块失败