我正在尝试用 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/