迹忆客 专注技术分享

当前位置:主页 > 学无止境 > 编程语言 > Python >

创建 Python 脚本以在 Linux 中打开新终端并运行命令

作者:迹忆客 最近更新:2023/06/01 浏览次数:

Linux 操作系统以其程序员广泛使用的多功能终端而闻名。 但在某些情况下,我们会发现自己重复编写同一组语法,这可能既无聊又耗时。

你有没有想过是否有一种方法可以在文件中预先编写 Linux 命令,然后在终端中立即执行? 是的! 你可以。

您可以在文件中编写预先编写的终端语法,并通过编写 Python 脚本一次性执行。 本文介绍了如何创建一个 Python 脚本来为我们打开一个新的终端并运行一个命令。


创建在 Linux 中打开新终端并运行命令的 Python 脚本

在我们开始之前,让我们修改一些基础知识。 Python 脚本在命令行界面中通过定位文件然后运行来执行。 这些文件被执行并显示输出。

有很多方法可以创建 Python 脚本来打开新终端并运行命令。 第一个示例展示了如何创建一个 Python 脚本,该脚本通过 Linux 命令来检查系统内部的 Python 版本。


在 Linux 中创建 Python 脚本来检查 Python 版本

如果需要在终端直接写命令查看Python版本,使用如下语法:

python3 --version

其中显示系统内部的 Python 版本,如下所示:

jay@jay-virtual-machine:~$ python3 --version
Python 3.10.6

这是命令行语法,这意味着它只能在终端中编写。 如果希望将其作为纯文本写入扩展名为 .py 的文本文件(例如:test.py),则会导致错误。

python3 --version

输出:

jay@jay-virtual-machine:~$ python3 test.py
Traceback (most recent call last):
  File "/home/jay/test.py", line 1, in <module>
    python3 --version
NameError: name 'python3' is not defined

必须创建一个 Python 脚本,使语法对 Python 编译器和终端都有意义,才能解决这个问题。

要创建 Python 脚本以打开新终端并运行命令,请创建一个扩展名为 .py 的文本文件并编写以下语法:

import os
My_Cmmnd="python3 --version"
os.system("gnome-terminal -e 'bash -c \""+My_Cmmnd+";bash\"'")

代码有什么作用?

  1. 在第一行代码中导入了 Python 模块 os。 该模块有助于将命令传递给操作系统。
  2. 需要执行的命令行语法存储在名为 My_Cmmnd 的变量中。 此示例中使用的语法检查系统的 Python 版本。
    My_Cmmnd="python3 --version"
    
  3. 第三行代码向系统发送命令。
    os.system("gnome-terminal -e 'bash -c \""+My_Cmmnd+";bash\"'")
    

上面的代码片段执行以下操作:

  1. os.system() 启动子 shell 并执行括号内的命令。
  2. gnome-terminal 命令在 Linux 操作系统中启动一个新的 gnome-terminal。
  3. 变量 My_Cmmnd 的内容作为 Bash 命令发送到新终端执行。

该脚本执行语法并显示所需的输出。

Python 3.10.6
jay@jay-virtual-machine:~$

使打开的终端保持活动状态并在其中运行命令的 Python 脚本

最后一个示例展示了如何创建一个 Python 脚本来打开一个新终端并通过将命令存储在一个变量中来运行命令。

另一方面,如果语法是单行命令,则可以直接输入而不将其存储在变量中。 创建一个扩展名为 .py 的文件并编写以下语法:

import os
os.system("gnome-terminal -e 'bash -c \"python3 --version\" '")

上面的语法启动一个新的终端并执行命令。 但是使用此方法会在执行命令后立即关闭终端。

解决此问题需要使用以下命令放置一个睡眠计时器:

import os
os.system("gnome-terminal -e 'bash -c \"python3 --version; sleep 5\" '")

上述语法使新终端保持打开状态 5 秒,但可以根据要求增加。 如果终端需要无限期保持活动状态,请使用以下语法。

import os
os.system("gnome-terminal -e 'bash -c \"python3 --version; bash\" '")

这使终端保持打开和活动状态,直到它被用户关闭。


在 Linux 中使用 Python 子模块 subprocess() 将命令传递到新终端

我们学习了如何创建一个 Python 脚本来打开一个新终端并使用 Python 子模块 os 运行命令。 尽管不再推荐使用这个内置库将命令传递到终端。

这是因为 os 在较新版本的 Python 中已被弃用。 为避免安全风险,必须改用Python子模块subprocess。

要创建 Python 脚本以打开新终端并使用子进程运行命令,请创建一个与前面示例类似的扩展名为 .py 的文件,并在其中写入以下代码:

import subprocess

My_Cmmnd = "ls"

process = subprocess.Popen(
    "gnome-terminal -e 'bash -c \""+My_Cmmnd+";bash\"'",
    stdout=subprocess.PIPE,
    stderr=None,
    shell=True
)

UNIX 命令 ls 列出当前目录中的文件。 因此,如果运行此命令,则会显示当前目录中的文件列表。

首先导入 subprocess() 模块; 然后,命令存储在一个变量中。 在名为 process 的变量中,参数是为 subprocess() 定义的。

subprocess.Popen 构造函数在读取 gnome-terminal -e 语法时在新的 gnome-terminal 中启动子进程。 最后,Python 脚本打开一个新终端并运行命令。

输出:

jay@jay-virtual-machine:~$ python3 test.py
Desktop    Downloads  Pictures    snap       test2.py  Videos
Documents  Music      Public    Templates  test.py

要了解 Linux shell 提供的一些其他功能,让我们探索使用 subprocess() 将参数发送到 shell。 例如,下面程序中的命令 ls -la 会列出所有元数据和隐藏文件。

import subprocess

My_Cmmnd = "ls -la"

process = subprocess.Popen(
    "gnome-terminal -e 'bash -c \""+My_Cmmnd+";bash\"'",
    stdout=subprocess.PIPE,
    stderr=None,
    shell=True
)

输出:

ls la command

当参数传递给 shell 时,此命令作为字符串执行。 结果,shell 在开始执行我们的 subprocess() 时将该字符串解释为命令参数。

上述方法的一个缺点是,当使用 shell=true 显式调用 shell 时,它会将所有元字符(包括空格)传递给子进程,这在 shell 注入事件中构成威胁。

为避免这种情况,请改用 Python 列表。 使用列表时,要调用的命令位于列表的第 0 个索引处,其他参数紧随其后。

将上一个示例中使用的命令调用为列表。

import subprocess

subprocess.run(['ls', '-la'])

输出:

ls la safe command

命令的结果也可以通过设置选项 capture_output=True 存储在变量中。

import subprocess

saved_results = subprocess.run(['ls', '-la'], capture_output=True)

print(saved_results.stdout)

输出:

capture output

可以看到输出显示了想要的结果,但是没有索引,文件名散乱。 发生这种情况是因为系统以字节为单位保存了 ls -la 命令的结果。

要获取字符串形式的结果,请设置选项 text=True。

import subprocess

saved_results = subprocess.run(['ls', '-la'], capture_output=True, text=True)

print(saved_results.stdout)

输出:

string output


总结

本文介绍如何创建 Python 脚本以打开新终端并运行命令。 阅读本文的读者将能够创建一个 Python 脚本来打开一个新终端并在 Linux 中轻松运行命令。

转载请发邮件至 1244347461@qq.com 进行申请,经作者同意之后,转载请以链接形式注明出处

本文地址:

相关文章

C++ 运行命令行

发布时间:2023/09/04 浏览次数:237 分类:C++

本文将简要讨论通过 C++ 程序在命令处理器中运行命令的 system() 方法。C/C++ 提供了一个函数,可以执行此操作,而无需产生另一个可以运行命令行处理器来运行 CMD 命令的进程。

如何在 Java 代码中调用 Python 脚本

发布时间:2023/08/07 浏览次数:254 分类:Java

本文介绍了从 Java 代码调用 Python 脚本的三种不同方法。从 Java 代码调用 Python 脚本 有时,我们必须从Java代码中调用Python脚本来满足项目需求。

从 Java 代码调用 Python 脚本

发布时间:2023/06/28 浏览次数:481 分类:Python

本篇文章介绍了从 Java 代码调用 Python 脚本的三种不同方法。从 Java 代码调用 Python 脚本 有时,我们必须从Java代码中调用Python脚本来满足项目需求。

Python 脚本中的 FFmpeg

发布时间:2023/06/26 浏览次数:599 分类:Python

本篇文章将介绍在Python中使用FFMPEG命令。安装 FFmpeg Python 包 首先,您必须在系统上安装 FFmpeg。 以管理员身份打开命令提示符并运行以下命令以使用 choco 安装 FFmpeg。

通过 Crontab 执行 Python 脚本

发布时间:2023/06/20 浏览次数:289 分类:Python

在本文中,我们将探讨 Crontab 以及如何使用它来运行 Python 脚本。Linux/Unix/Solaris 中的 Crontab

在 Python 脚本中设置环境变量

发布时间:2023/06/14 浏览次数:190 分类:Python

环境变量是与系统进程交互的一种深入方式; 它允许用户获得有关系统属性、路径和已经存在的变量的更详细信息。我们如何使用环境变量

在 Docker 中组合构建和运行命令

发布时间:2023/04/16 浏览次数:223 分类:Docker

我们通常使用 docker build 和 run 命令。 但是,我们通常将大多数命令组合在一次运行中以整理本地图像存储库。本文将讨论将 docker build 和 run 等命令组合在一行中。

如何在正在运行的 Docker 容器上运行命令

发布时间:2022/03/01 浏览次数:189 分类:学无止境

通常,我们希望完全包含 Docker 应用程序,但有时出于开发或自动化目的,能够像使用 Linux VM 一样使用 Docker 容器。 Docker 提供了用于在容器内运行命令甚至整个 shell 的工具。

扫一扫阅读全部技术教程

社交账号
  • https://www.github.com/onmpw
  • qq:1244347461

最新推荐

教程更新

热门标签

扫码一下
查看教程更方便