如何使用 python 脚本在 Ubuntu 16.04 中启动终端、在该终端上执行命令并检索这些命令的输出?
例如,我想检查文件夹的内容(通过 CLI)并将结果返回给 Python 脚本。因此,我希望我的 Python 代码执行以下操作:
- 打开终端
cd <path/to/folder>
ls
- //检索输出并处理该信息。
是否可以在不打开终端的情况下运行 CLI 命令并听取结果(因为下一个命令基于上一个命令的输出)?
答案1
如果您确实需要终端,则可能需要创建一个 pty 并将 stdin 和 stdout 连接到它,然后使用 Subprocess 模块运行您的应用程序。即使这样也不会过滤掉任何 curses 转义序列或 ASCII 图形(否则您为什么需要终端?)但如果应用程序正在检查终端是否存在,它就会起作用。
如果您需要做的只是运行命令行应用程序并重定向其输入和输出,只需直接使用 Subprocess 模块。
答案2
您可以使用该模块执行此操作os
:
#!/usr/bin/env python
import os
output = os.listdir('path_to_folder') # output is a list
# Do whatever you want to output
您可以阅读以下文章了解该os
模块的其他功能https://docs.python.org/3/library/os.html。请注意,模块中的方法可在不同的操作系统之间移植,因此您实际上可以在 Ubuntu 之外使用您的脚本。
答案3
import subprocess,shlex
command = 'ls -la'
workingdirectory = 'C:users/Account/Desktop'
try:
process = subprocess.Popen(shlex.split(command), stdout=subprocess.PIPE,
stderr=subprocess.PIPE, shell=True, cwd=workingdirectory)
stdout, stderr = process.communicate()
if stderr.decode('utf-8') == "":
print(stdout.decode('utf-8'))
else:
print(stderr.decode('utf-8'))
https://github.com/chefsoftwarehouse/CMD.py/blob/master/CMD.py