我如何让Python 2.7处理具有"&&amp ;;的shell脚本出口&#34 ;?

时间:2015-01-18 13:28:53

标签: python linux shell python-2.7 tkinter

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

我可以让Python Button运行脚本,但是一旦脚本运行正常,我就无法关闭终端。

这是正常的命令:/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()

2 个答案:

答案 0 :(得分:0)

您应该使用:

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

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

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

有关subprocess函数参数的详细信息,请参阅this问题。

答案 1 :(得分:0)

在尝试启动shell脚本后退出Python脚本:

#!/usr/bin/env python
import subprocess
import Tkinter

root = Tkinter.Tk()

def start_conky():
    try:
        subprocess.Popen(['/home/user/.conky_start.sh']) # don't wait
    finally:
        root.destroy() # exit the GUI

Tkinter.Button(root, text="Conky", command=start_conky).pack()
root.mainloop()