我正在尝试用python编写一个脚本,它应该会改变我的树莓皮桌面壁纸。我是python和linux的初学者,整天都被这个问题困扰着。很高兴听到你们的消息
这是更改桌面墙纸的终端命令:
pcmanfm --set-wallpaper /usr/share/rpd-wallpaper/wallpaper.jpg
只涉及linux终端语法:我想打开第二个终端并在其中运行一个命令,所有这些都是从第一个终端启动的。如果我输入第一个终端:
pi@raspberrypi:~ $ lxterminal &
它打开一个新的终端窗口,该窗口保持打开状态,而不是子进程对吗?在第二个终端中,我的更改墙纸命令可以工作。下面的命令不起作用,如果我在gnome终端旁边放了一个“&”,它将打开一个新的终端,但不执行用-e指定的命令,并给我一个错误。
gnome-terminal -e 'bash -c \"pcmanfm --set-wallpaper /usr/share/rpd-wallpaper/wallpaper.jpg; exec bash\"'
如何打开一个新的终端,该终端的命令与-e一起传递,而-e也不是子进程?
最佳答案
我知道你是新来的,所以在回答你的问题之前,我想先给你介绍一些概念。
shell/unix中的“&”运算符并不意味着要打开新的终端。它是一个调用unix方便的小作业控制协议的操作符,该协议允许复杂程序的并行化!太棒了。它使该命令成为一个后台进程,这基本上意味着它启动一个新的shell(或OP语言中的“terminal”),运行该进程并让您控制当前的shell(或terminal)。您仍然控制的shell称为前台进程。
现在,你对gnome终端的理解有点复杂。gnome终端正在gnome环境中执行bash终端(对于在其中运行的每个进程都有一个shell)。-e是您要发送到此终端的命令。所以,如果您希望将命令发送到后台,则在该命令的末尾加上与号(&)。
现在,让我们看看要运行的命令:
gnome-terminal -e 'bash -c \"pcmanfm --set-wallpaper /usr/share/rpd-wallpaper/wallpaper.jpg; exec bash\"'
-e表示要在新终端中运行的命令。bash-c(commmand)正在更改您的墙纸。好吧,酷。如果我不得不猜测的话,exec bash可能是抛出的任何奇怪的错误。但那条线应该什么也做不了。
在我看来,你不需要把任何东西发送到后台。
gnome-terminal -e 'bash -c \"pcmanfm --set-wallpaper /usr/share/rpd-wallpaper/wallpaper.jpg
应该换墙纸。但是,要完整地回答这个问题,只需将&放在希望在后台发送的命令之后。
关于python - 如何从第一个终端打开第二个终端并在其中运行命令? (没有子进程),我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/57417019/