2010-12-06 94 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('../') 

是的,这是不好的方法,但它可以帮助你。