我有一個python應用程序,如果點擊某個特定的按鈕,應該運行一個bash腳本。我把應用程序放到菜單中,創建了.desktop文件,除了subprocess.call以外,一切看起來都很好。我還用os.system()和其他幾種解決方案嘗試了它,如果應用程序是從終端啓動的,它們都可以正常工作,但如果它是通過菜單圖標啓動的,則不會。有人知道怎麼修這個東西嗎?我希望它運行沒有終端窗口,從菜單上,但沒有找到類似於我的主題Python subprocess.call運行bash腳本如果從終端運行,但不從debian菜單運行
回答
這是因爲GUI過程從標準輸出/ stderr的分離,並重定向到登錄電子代替。請解釋你的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!"
我不確定這會有所幫助。 shell = True意味着該命令將首先通過shell進行處理,並且該shell將其傳遞給OS。如果沒有使用假殼。命令直接傳遞給操作系統。雖然shell = True可能會迫使shell啓動,但我認爲這不會有幫助。 – Dalen
我也試過,沒有工作:( –
好了,兩個答案的工作,因爲這個問題是不缺少的終端,但我知道。
我在我的應用程序,它最初是爲了調用腳本執行留下了代碼會話,但它是從另一個部分調用,所以相對路徑
subprocess.call('./script')
有固定
subprocess.call('absolute_path_to_script')
- 這使它立即。我也嘗試改變到絕對路徑,但按鈕從未調用該事件,所以...我的錯誤,感謝您的時間來嘗試幫助我
我Upvoted你只是爲了承認你的錯誤。通過代碼會話,你是否意味着從GUI啓動時工作目錄發生了變化。這個是正常的。如果你之前發佈了回溯,我們可能已經告訴過你發生了什麼。在詢問SO時請記住這一點。始終發佈嘗試和結果。很高興您的應用有效 – Dalen
我的意思是我一遍又一遍地改變了幾個小時的代碼甚至沒有執行,因爲沒有任何調用它。在某個時間(幾個月前),我最終改變了主意,並將subprocess.call放到了另一個函數中,並且該函數由button_click事件調用,該函數從未改變過。所以我試圖修復我的代碼,沒有影響代碼執行。 :(但我學到了我的課:) –
Woops,這是在行動討厭。 – Dalen
- 1. 從python腳本運行subprocess.call
- 2. 腳本從終端運行,但不是從crontab運行?
- 3. 如何運行,從bash的終端運行Ruby腳本
- 4. bash腳本從命令行運行但不是從cron運行
- 5. 從Ubuntu終端運行Python腳本NameError
- 6. 運行python腳本 - debian的
- 7. 從bash終端運行可視Python腳本
- 8. java:NoClassDefFoundError當從終端運行但不是從netbeans運行時
- 9. 從bash腳本運行javascript
- 10. 從java運行bash腳本
- 11. 從JVM運行bash腳本
- 12. 從bash運行Oracle腳本
- 13. 從php運行bash腳本
- 14. bash腳本從rc.local運行
- 15. gdb從命令行運行,但不是從腳本運行
- 16. Powershell腳本從命令行運行,但不是從TFS運行
- 17. 從終端運行遠程php腳本
- 18. GETENV從終端運行PHP腳本
- 19. bash腳本手動運行在終端,而不是從crontab中
- 20. bash腳本從php命令行運行,但不是從頁面
- 21. 從python運行bash腳本。 MAC OS
- 22. 不能運行從終端
- 23. 命令在Linux終端中運行,但不在bash腳本中
- 24. 使用PHP運行Debian Bash腳本
- 25. Shell腳本從CLI運行,但不是從Crontab運行
- 26. 在Python腳本中運行終端
- 27. 在Mac終端上運行Python腳本
- 28. 在終端中運行python腳本
- 29. 從PHP腳本運行bash腳本
- 30. 從R腳本運行bash腳本
謝謝,這看起來不錯,我會嘗試它。我的腳本運行一些終端命令轉換和編輯圖像,然後將其發送到打印機。 ,我知道如果我從菜單運行應用程序,我錯過了該腳本的終端,但我不知道如何在運行時獲得應用程序。 –
如果這些命令沒有使用stdout/stderr來表示沒有具體內容,而是一些內容豐富的文本,並且它們不使用stdin中的任何內容,那麼在沒有終端/控制檯的情況下運行腳本應該可以工作。 – Dalen
@ kov%c3%a1cs-gabika-ella:我編輯了我的A.並添加了一些可能有用的代碼。 – Dalen