python - 如何从第一个终端打开第二个终端并在其中运行命令? (没有它是子进程)

标签 python linux shell terminal

我正在尝试用 python 编写一个脚本,它应该可以更改我在树莓派上的桌面墙纸。我是 python 和 linux 的初学者,整天都被这个问题困住了。很想听听你们的意见<3

这是更改我的桌面墙纸的终端命令:

pcmanfm --set-wallpaper /usr/share/rpd-wallpaper/wallpaper.jpg

仅关于 linux 终端语法:我想打开第二个终端并在其中运行一个命令,所有这些都是从第一个终端启动的。如果我输入我的第一个终端:

pi@raspberrypi:~ $ lxterminal &

它会打开一个新的终端窗口并保持打开状态,这不是子进程吗?在这个第二个终端中,我的更改墙纸命令有效。以下命令不起作用,如果我在 gnome-terminal 旁边放置一个“&”,它会打开一个新终端,但不会执行用 -e 指定的命令并给我一个错误。

gnome-terminal -e  'bash -c \"pcmanfm --set-wallpaper /usr/share/rpd-wallpaper/wallpaper.jpg; exec bash\"'

如何使用 -e 传递的命令打开一个新终端,该命令也不是子进程?

最佳答案

我知道你是新手,所以我想在回答你的问题之前向你介绍一些概念。

shell/unix 中的“&”运算符并不意味着打开一个新的终端。它是一个调用 unix 方便的小作业控制协议(protocol)的运算符,它允许复杂程序的并行化!这很棒。它使该命令成为一个后台进程,这基本上意味着它会启动一个新的 shell(或 OP 语言中的“终端”)来运行该进程并让您控制当前的 shell(或终端)。您仍然控制的 shell 称为前台进程

现在,您使用 gnome-terminal 进行的操作有点复杂。 gnome-terminal 在 GNOME 环境中执行一个 bash 终端(它为您在其中运行的每个进程提供一个 shell)。 -e 是您要发送到此终端的命令。因此,如果这是您希望发送到后台的命令,您可以在该命令的末尾放置与号 (&)。

现在,让我们看看您要运行的命令:

gnome-terminal -e  'bash -c \"pcmanfm --set-wallpaper /usr/share/rpd-wallpaper/wallpaper.jpg; exec bash\"'

-e 表示您要在新终端中运行的命令。 bash-c(命令)正在更改您的墙纸。嗯不错。如果我不得不猜测的话,exec bash 可能会抛出任何奇怪的错误。但是那条线根本不执行任何操作。

在我看来,您实际上不需要向后台发送任何内容。

gnome-terminal -e  'bash -c \"pcmanfm --set-wallpaper /usr/share/rpd-wallpaper/wallpaper.jpg

应该改变你的墙纸。但是,要完全回答这个问题,只需将 & 放在您希望在后台发送的任何命令之后。

关于python - 如何从第一个终端打开第二个终端并在其中运行命令? (没有它是子进程),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57417019/

相关文章:

python - "ValueError: could not convert string to float"转换输入时

linux - Fedora 17 中的 yum 更新速度极慢

java - JMX:MaxFileDescriptorCount 和 OpenFileDescriptorCount

linux - 为每个文件夹定义 oh my zsh 别名

linux - 从另一个具有动态路径的 bash 脚本调用 bash 脚本

python - SQLAlchemy 多对多 AND 过滤器

python - 在 Ubuntu 14.04 上构建 Python 3.5.1 时检查 getrandom() 函数返回否

python - 如何使用 KFold 交叉验证输出作为 CNN 输入进行图像处理?

linux - 为什么我的 cron 作业没有运行?

mysql - 在shell脚本中执行MySQL命令?