2013-06-01 77 views
0

我正在學習我的項目的bash腳本和python,我想在完成執行後終止終端。 我在一個終端上運行我的進程,當我執行它時,它會打開一個新的終端並執行請求的操作,並在稍後完成後終止新的終端,但這不會發生。 我的代碼是:如何在完成過程後終止終端

import os  
os.system(""xfce4-terminal -e 'bash -c \"./testing.sh; exec bash\"'") 

當我運行它,它會打開新的終端,並在其中執行,而執行後「PWD」是

ubuntu:-/home/new$ 

不能任意命令發送到那裏。
完成後我想殺死終端,因爲下次執行我想打開新的終端。

我嘗試這樣做效果很好,但沒有想法如何在python腳本添加:

a=`tty`  
echo $a 
b=`tty | sed 's/\/dev//'` 
echo $b 
c=`ps aux | grep $a | grep 'bash$' | awk '{print $2}'` 
echo $c 
d= `$c | awk '{print $1}' 
kill -9 $d 

尋找建議,請指導我得到的解決方案。 在此先感謝。

+1

爲什麼你首先打開一個新的終端? –

+0

目前還不清楚你的意思是「不能發送任何命令到那裏。」。你想在終端輸入命令嗎?然後看到我的答案。如果你想從Python發送命令到終端中的shell,那麼你將需要更多。 – msw

+2

你能描述一下你想要做什麼嗎?我認爲你正在尋找解決方案來解決你不需要的問題。 –

回答

0

終端在最後一個子進程退出時關閉。這將做我認爲你想要的:

os.system("xfce4-terminal -e 'bash -c \"echo hello ; /bin/bash ; exit 0\"'") 

我測試過。

新增迴應置評

有在Ubuntu /usr/bin/usb-devices一個shell腳本,它打印到標準輸出,然後退出。如果我運行Python

os.system("xfce4-terminal -e /usr/bin/usb-devices") 

然後出現一個終端,顯示腳本的輸出,然後終端退出。這真的不能簡單得多。

+0

您正在退出最後一個/ bin/bash,而不是終端。 –

+0

@ThomasFenzl「終端在最後一個子進程退出時關閉。」你測試過了嗎? – msw

+0

這取決於OP實際嘗試實現的內容。我把它理解爲「他希望終端被關閉」,這與您的答案沒有任何關係。 –

4

讓我們備份和代碼的一條主線您發佈仔細看:

os.system(""xfce4-terminal -e 'bash -c \"./testing.sh; exec bash\"'") 

它有什麼作用?

  • 它使用Python來調用一個shell(os.system),由於許多原因,這通常不是一個好主意。
  • 在那個shell裏面,它啓動了xfce4-terminal。
  • 在xfce4終端裏,它運行bash。可能xfce4-terminal在另一個bash中運行這個bash。
  • 在這個新的bash中,它運行testing.sh。
  • 最後,由於我不清楚的原因,它運行另一個bash。

流程層次結構是什麼樣的?

shell (whichever you use to launch this thing, likely bash) 
    python 
     shell (the system default, possibly bash) 
      xfce4-terminal 
       bash (replaced by another bash at the end, "exec bash") 
        bash 
         testing.sh 

你看這看起來有多瘋狂嗎?想想你實際上想要完成什麼。它可能看起來更像這樣:

shell 
    python 
     testing.sh 

如何做到這一點?

import subprocess 
subprocess.check_call(['./testing.sh']) 

如果你真的需要啓動一個XFCE4端:

subprocess.check_call(['xfce4-terminal', '-e', './testing.sh']) 
+0

我想他想預先加載環境,然後得到一個交互式shell。是的,流程樹很瘋狂,但沒有更多的意圖或者'testing.sh'的清晰度,這很難知道。 – msw

+0

@ John Zwinck:我曾嘗試過,但它只是打開一個終端,並突然關閉..所以我試了這個。 – nammu

+3

現在你說它「突然關閉」,但在你原來的問題中,你抱怨終端在你想要的時候沒有關閉。我認爲我們需要你非常非常清楚地從上到下解釋你在這裏試圖完成的實際目標。否則,它將成爲更多的奇特怪物之外的樂隊。 –

0

我已經試過這樣的事情,現在它的工作:

os.system("xfce4-terminal -e 'bash -c \"./testing.sh ; sleep 20 ; exit 0\"'") 

感謝您的幫助。