2010-12-06 93 views
6

請指教 - 這可以以某種方式克服? 子進程是否可以創建子進程?python子進程使用進口子進程

問題是,我有一個準備好的應用程序需要調用python腳本。 這個腳本本身完美,但需要調用現有的shell腳本。 示意性的問題是在下面的代碼:

parent.py

import subprocess 
subprocess.call(['/usr/sfw/bin/python', '/usr/apps/openet/bmsystest/relAuto/variousSW/child.py','1', '2']) 

child.py

import sys 
import subprocess 
print sys.argv[0] 
print sys.argv[1] 

subprocess.call(['ls -l'], shell=True) 
exit 

運行child.py

python child.py 1 2 
    all is ok 

運行parent.py

python parent.py 
Traceback (most recent call last): 
    File "/usr/apps/openet/bmsystest/relAuto/variousSW/child.py", line 2, in ? 
    import subprocess 
ImportError: No module named subprocess 

非常感謝 apllom

+0

這是在Solaris 2.6.2上 - 您是否在不同的平臺上嘗試這些示例? – apllom 2010-12-06 07:31:47

+0

對不起 - Solaris 10,python 2.6.2是從源碼構建的 – apllom 2010-12-06 07:34:03

回答

1

There should be nothing stopping you from using subprocess in both child.py and parent.py

我能夠運行完全正常。 :)

問題調試

You are using python and /usr/sfw/bin/python .

  1. 是光禿禿的蟒蛇指向相同的蟒蛇?
  2. 你可以通過輸入'which python'來檢查嗎?

我相信,如果你做了以下,它會爲你工作。

/usr/sfw/bin/python parent.py 

或者,你可以改變你parent.py code

import subprocess 
subprocess.call(['python', '/usr/apps/openet/bmsystest/relAuto/variousSW/child.py','1', '2']) 
0

使用subprocess.call是不這樣做的正確方法。在我看來,subprocess.Popen會更好。

parent.py:

1 import subprocess 
2 
3 process = subprocess.Popen(['python', './child.py', 'arg1', 'arg2'],\ 
4   stdin=subprocess.PIPE, stdout=subprocess.PIPE,\ 
5   stderr=subprocess.PIPE) 
6 process.wait() 
7 print process.stdout.read() 

child.py

1 import subprocess 
2 import sys 
3 
4 print sys.argv[1:] 
5 
6 process = subprocess.Popen(['ls', '-a'], stdout = subprocess.PIPE) 
7 
8 process.wait() 
9 print process.stdout.read() 

出方案:

python parent.py 
['arg1', 'arg2'] 
. 
.. 
chid.py 
child.py 
.child.py.swp 
parent.py 
.ropeproject 
0

你可以嘗試添加你的Python目錄中chield到sys.path中.py

import sys 
sys.path.append('../') 

是的,這是不好的方法,但它可以幫助你。