python - 如何让 Python 2.7 处理包含 "&& exit"的 shell 脚本?

标签 python linux shell python-2.7 tkinter

我有一个桌面图标(Linux Mint 系统),它调用脚本(conky),但也需要退出,所以我没有一直打开终端窗口。我正在尝试将其转换为屏幕上的 python 按钮。

我可以让 Python 按钮运行脚本,但一旦脚本启动并正常运行,我就无法让它关闭终端。

这是正常命令:/home/user/.conky_start.sh && exit

当前 Python 按钮脚本:

import Tkinter
from Tkinter import *
import subprocess

top = Tkinter.Tk()

def run_conky():
   subprocess.call(['/home/user/.conky_start.sh', '&&', 'exit'], shell=True)

B = Tkinter.Button(top, text ="Conky", command = run_conky)

B.pack()
top.mainloop()

最佳答案

您应该使用:

subprocess.call('/home/user/.conky_start.sh && exit', shell=True)

shell=True时,call的第一个参数必须是代表命令行的字符串。如果传递列表,第一个元素将用作命令行,其他参数将作为选项传递到底层 shell。

换句话说,代码中的 && exit 从未执行,因为它作为选项传递给 shell(可能只是忽略了无法识别的选项)。

参见this有关 subprocess 函数参数的更多信息的问题。

关于python - 如何让 Python 2.7 处理包含 "&& exit"的 shell 脚本?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28010184/

相关文章:

python - 尝试查找棋盘角时打开 cv python 错误

linux - 我应该如何在 bash shell 中使用变量通过 ssh 发送 heredoc 部分?

shell - TMUX:启动 shell 命令退出时如何使新窗口保持不变?

linux - 如何将 nohup stdout 重定向到 stdin

python - 如何获取 Django 中登录用户的名字和姓氏?

Python 向 PATH 添加了很多东西。我该如何停止?

python - 如何在 python 中获取函数当前名称

linux -/dev/zero或/dev/random-什么更安全,为什么?

c++ - 在同一个 cpu 内核上执行的 OpenMP 线程

shell - 如何在没有命令行参数的情况下将参数传递给子 shell(通过执行,而不是源代码)?