2012-04-06 103 views
-1

無論何時我試圖運行使用subprocess.call()os.system()的shell腳本,腳本都會運行,但Python腳本也會終止,並且在調用之後編寫的所有內容都不會執行。我曾嘗試從庫中導入此調用,並使用execfile()從單獨的python腳本運行或執行它,但同樣的事情也發生在那裏。我的系統有什麼問題嗎?或者它是這樣的?如果是後者,那麼我應該如何阻止這個並且在進行這個子進程/系統調用之後讓我的Python腳本繼續運行?如何阻止子進程終止我的腳本?

[email protected]:~/Desktop$ python 
Python 2.7.2+ (default, Oct 4 2011, 20:03:08) 
[GCC 4.6.1] on linux2 
Type "help", "copyright", "credits" or "license" for more information. 
>>> import subprocess 
>>> subprocess.call(["sh","test.sh"]) 
[email protected]:~/Desktop$ 

這是shell腳本:

export <SOMEPATHNAME>=/some/path/here 
exec $SHELL -i 

我認爲這是導致在那個特定的外殼終止運行的所有程序的exec $SHELL -i。但我不知道我有什麼其他的選擇。如果我不使用它,export不起作用。目前,我想要導出的路徑是導出,但是Python進程隨之一起終止。

在此先感謝!

+0

顯示您的腳本。您可能不會遇到發生的異常。 – marue 2012-04-06 14:31:50

+0

SHOW ... CODE。只有你知道這個問題的背景。我們其他人不知道你在嘗試什麼,結果如何。 – jdi 2012-04-06 14:32:31

+0

對不起,添加它會延遲。我已經添加了代碼。 – 2012-04-06 14:44:25

回答

3

shell不會殺死你的腳本,它完全按照你要求的方式執行,開始一個新的交互式bash會話。注意,在調用子進程後,如果我做了一個ps,python仍在運行。更進一步,如果您退出bash會話,它會將您帶回python解釋器/腳本。

[email protected]:~$ python 
Python 2.6.5 (r265:79063, Apr 16 2010, 13:09:56) 
[GCC 4.4.3] on linux2 
Type "help", "copyright", "credits" or "license" for more information. 
>>> import subprocess 
>>> subprocess.call(['sh', 'test.sh']) 
[email protected]:~$ ps 
    PID TTY   TIME CMD 
1412 pts/3 00:00:00 bash 
1485 pts/3 00:00:00 python 
1486 pts/3 00:00:00 bash 
1509 pts/3 00:00:00 ps 
[email protected]:~$ exit 
exit 
0 
>>> print "im back in python" 
"im back in python" 
>>> exit() 

導出應該不需要你開始一個新的bash會話工作。我不確定你爲什麼使用導出,但是你考慮過os.environ['SOMEPATHNAME'] = "/some/path/here"。這會在您使用subprocess.call之前在您的python腳本中設置環境變量。

+0

是的,我嘗試過,但我想設置一個在整個系統中持久的環境變量。有沒有其他的方法可以調用一個shell腳本來設置一個在整個系統中持久化的變量? – 2012-04-06 15:41:32

+0

貫穿整個系統?這意味着您在一個腳本中更改了變量,並且它在另一個已經運行的腳本中也發生了變化我不知道這是可能的(這聽起來不是一個好主意)。 – 2012-04-06 15:43:39

+0

是的,我希望它永久設置。如果我打開任何其他shell並查詢'env | grep「variablename」',我應該看到結果。 – 2012-04-06 15:49:36