我正在尝试捕获我从运行到变量的python脚本获取的所有数据。我从脚本中的用户那里获取了一些输入,并且想要捕获从开始到结束的所有内容。
几乎与此类似:Running shell command and capturing the output
但这再次使用了脚本中的子进程来获取输出。
我想要的是这样的:
当我在终端中运行ls -l时,我希望我的脚本捕获ls -l的输出
如果我写:
p2 = subprocess.Popen('ls' ,'-l',stdout= subprocess.PIPE).communicate()[0])
在我的脚本中,它将执行两次脚本。
预期的输出是当我在要在p2中捕获的终端中运行ls -l时捕获所有数据。
答案 0 :(得分:0)
如果您想避免显式使用subprocess.Popen()
的所有麻烦,那就去os.popen("command").read()
-它在幕后运行前者,在我看来,p2 = os.popen("ls -l").read()
的结果看起来像恰到好处。
答案 1 :(得分:0)
您可以使用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