我有一个python应用程序,如果单击一个特定按钮,它应该运行一个bash脚本。我把应用程序放到菜单中,创建了.desktop文件,除了subprocess.call之外,一切看起来都很好。我还尝试使用os.system()和其他几个解决方案,如果应用程序是从终端启动的话,所有这些解决方案都正常工作,但是如果它是通过菜单图标启动的话。有人知道怎么修这个东西吗?我想让它在没有终端窗口的情况下从菜单运行,但无法找到类似于我的主题
答案 0 :(得分:1)
好的,这两个答案都有效,因为问题不在于丢失的终端,而在于ME。
我在我的应用程序中留下了一个代码会话,最初的目的是调用脚本执行,但它是从另一个部分调用的,所以修复了相对路径
subprocess.call('./script')
到
subprocess.call('absolute_path_to_script')
答案 1 :(得分:0)
答案 2 :(得分:0)
这是因为GUI进程与stdout / stderr分离并改为重定向到loging。请解释一下你的bash脚本在做什么,而且,它显然是在没有窗口的情况下运行的。要检查,让它写一些文件,你会看到脚本已经运行。或者你提到你不喜欢你的进程有一个控制台窗口,但你的bash脚本应该在一个中运行。
如果是这样,首先使用subprocess.call()调用终端,并使用命令调用bash脚本。
请更准确,并清楚说明您的需求,以便我们为您提供帮助。
如果您真的需要启动终端,我会为您整理一些代码。
在Linux上启动新终端的问题是有许多不同的桌面环境。
他们每个人通常都会建立自己的终端计划。
使用哪一个???你可以尝试直到你成功:
import subprocess
script = "~/full_path_to_your_bash_script.sh"
# Uncomment following line to ensure execution by bash and remove potential problems with permissions.
#script = "bash "+script
# Commands to call (add some more if you remember any):
commands = [
['gnome-terminal', '-x', script],
# xterm is usually present:
['xterm', '-e', script],
['rxvt', '-e', script]
]
ok = 0
for command in commands:
try:
subprocess.call(command)
ok = 1; break
except OSError, e:
if e.errno==2: continue # No such file or directory - skip non-existing terminal and try another
raise # Some other OSError occurred
except: raise
if not ok: raise RuntimeError, "No terminal available!"